#docker #dockerfile #github-actions
Вопрос:
Моя структура репо git
app
- app.server
- server files
- app.client
- node_modules
- public
- src
- .dockerignore
- Dockerfile
- package.json
- package-log.json
Я настроил CI/CD с помощью действий на GitHub, но что-то не так в моем изображении Dockerimage для моего клиентского приложения (React)?
Сообщение об ошибке: COPY failed: file not found in build context or excluded by .dockerignore: stat package.json: file does not exist
Мой файл .dockeringore:
node_modules
build
.dockerignore
Dockerfile
Dockerfile.prod
Мой Док-файл:
# pull official base image
FROM node:13.12.0-alpine
# set working directory
WORKDIR /app.client
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app.client/node_modules/.bin:$PATH
# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --silent
RUN npm install react-scripts@3.4.1 -g --silent
# add app
COPY ./ ./
# start app
CMD ["npm", "start"]
Моя команда действия GitHub для вызова файла Dockerfile:
docker build app.client/ -t mycontainerregistry.azurecr.io/appdb:${{ github.sha }}
Это часть реестра контейнеров для публикации в Azure, который я пытаюсь изучить. Я предполагаю, что файл Dockerfile работает, потому что перед сбоем на шаге 4/9 он проходит через файл Dockerfile:
Step 1/9 : FROM node:13.12.0-alpine
13.12.0-alpine: Pulling from library/node
aad63a933944: Pulling fs layer
... (and so on)
Step 3/6 : COPY package.json ./
COPY failed: file not found in build context or excluded by .dockerignore: stat package.json: file does not exist
Error: Process completed with exit code 1.
Комментарии:
1. Как вы создаете свой имидж?
2. Что
.dockerignore
содержит (игнорирует)?3. как вы вызываете докера? похоже, вы находитесь не в том каталоге. Было бы лучше быть явным, используя некоторые переменные конвейеров, которые указывают на репо в качестве контекста, а не просто точку или что-то в этом роде.
4. «с какого пути он выполняется? » — последний аргумент
docker build ...
команды является либо путем, либо URL-адресом, либо a-
и указывает контекст сборки (см.docker build
Руководство ). В большинстве случаев мы используем.
, т. е. текущий каталог , в качестве контекста сборки. Это путь, который используется для разрешения всех путей из файла Docker, определяющих ресурсы узла docker.5. Я добавил команду для создания изображения
Ответ №1:
WORKDIR
ссылается на рабочий каталог в контейнере. Рабочий каталог на хосте по — прежнему является корневым каталогом вашего репозитория.
Комментарии:
1. » Рабочий каталог на хосте по — прежнему является корнем вашего репозитория». — Это предположение 🙂 пока мы не видим
docker build ...
команду, мы не можем быть уверены, что это контекстный каталог.