Как указать правильный путь для копирования файлов с помощью многоэтапной сборки докеров?

Вот Dockerfile:

# tag block to refering
FROM node:alpine as builder
WORKDIR /home/server
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "run", "build"]

# on second step use another core image
FROM nginx

# copy files builded on previous step
COPY --from=builder /home/server/build usr/share/nginx/html

Когда образ создается на локальном компьютере с помощью команды docker build. - все работает нормально, но когда я пытаюсь поместить проект в zeit, я получаю следующую ошибку:

Step 8/8 : COPY --from=builder /home/server/build usr/share/nginx/html
> COPY failed: stat   /var/lib/docker/overlay2/a114ae6aae803ceb3e3cffe48fa1694d84d96a08e8b84c4974de299d5fa35543/merged/home/server/build: no such file or directory

Что это может быть? Спасибо.


person Gordienko R.    schedule 03.10.2018    source источник


Ответы (1)


Ваш первый этап фактически не запускает команду сборки, поэтому каталог сборки пуст. Измените строку CMD на строку RUN.

Один совет: каждая отдельная строка последовательности docker build создает свой собственный промежуточный уровень, и каждый уровень представляет собой исполняемый образ Docker. Вы увидите результат вроде

Step 6/8: CMD ["npm", "run", "build"]
 ---> Running in 02071fceb21b
 ---> f52f38b7823e

Этот последний номер является действительным идентификатором образа Docker, и вы можете

docker run --rm -it f52f38b7823e sh

чтобы увидеть, что на этом изображении.

person David Maze    schedule 03.10.2018
comment
Да, ты прав. Он работает на локальном компьютере, потому что я уже создаю свой проект локально и создаю папку, только что скопированную с другими файлами. Спасибо. - person Gordienko R.; 03.10.2018