Отсутствует файл в моем док-файле, с какого пути он запускается?

#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 ... команду, мы не можем быть уверены, что это контекстный каталог.