В чем проблема? каждый раз такое случается ...

 => CACHED [2/5] WORKDIR ../app                                                                                                                               0.0s 
 => ERROR [3/5] COPY package.json .                                                                                                                           0.0s 
------
 > [3/5] COPY package.json .:
------
failed to compute cache key: "/package.json" not found: not found

[this is my filepaths] https://i.stack.imgur.com/tg9nS.png

Не понимаю, что делаю не так.

Докерфил:

FROM node
WORKDIR /app
COPY ../app/package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

Я использую docker build . в PowerShell

0
f1x0z 7 Июл 2021 в 13:30

4 ответа

Лучший ответ

Вы не можете включать файлы из-за пределов вашего контекста (текущего каталога, в котором вы находитесь) в образ докера.

Таким образом, вы можете переместить каталог app на хосте в папку Dockerfile или

Вы можете сделать следующее

docker build -f docker\Dockerfile .

В родительском каталоге (т. е. в каталоге, содержащем папки docker и app). И настройте свой Dockerfile следующим образом

COPY app/package.json .
0
derpirscher 7 Июл 2021 в 11:23

Вы обновляете WORKDIR, как говорится в документе:

Инструкция WORKDIR устанавливает рабочий каталог для любых инструкций RUN, CMD, ENTRYPOINT, COPY и ADD, которые следуют за ней в Dockerfile.

Я думаю, просто говоря

COPY package.json

Должно хватить.

0
mfurkangok 7 Июл 2021 в 10:38

К сожалению, у Dockerfiles нет доступа к родительским каталогам. Однако вы можете создать файл докеров из родительского каталога, используя docker build -f path/to/dockerfile .. Имейте в виду, что ваш COPY относится к каталогу, из которого вы запускаете docker build, который является родительским каталогом.

Кроме того, WORKDIR использует / создает каталог внутри контейнера. WORKDIR /app создает папку app в корневом каталоге контейнера, поэтому /../app не требуется (хотя и дает тот же результат).

0
xtda4664 7 Июл 2021 в 11:27

Вы не можете ссылаться на родительский каталог в dockerfile по причине, описанной в документации docker:

Путь должен находиться внутри контекста сборки; вы не можете ДОБАВИТЬ ../something / something, потому что первый шаг сборки докера - отправить контекстный каталог (и подкаталоги) демону докера.

Источник

Самый простой обходной путь:

docker build -t <some tag> -f <dir/dir/Dockerfile> .

Еще вы можете добавить контекст сборки. Вместо того, чтобы копировать все файлы в текущем каталоге в Docker Daemon, вы можете настроить контекст, например

docker build -t <some tag> -f ./dir/to/Dockerfile ./dir/to/build/context
0
Dory Nguyen 7 Июл 2021 в 13:57