Docker не ищет файл в каталоге - PullRequest
0 голосов
/ 14 января 2020

Я создал docker файл.

FROM node:13.6.0-alpine3.10

WORKDIR /src
RUN apk add --no-cache bash

COPY ./package.json .
COPY ./package-lock.json .

RUN npm install

COPY . .

EXPOSE 8081

CMD npm run start:dev

Структура моего проекта.

.
└── my-app
    └── docker-compose.yml
    └── ...
    └── server
        └── docker
            └── Dockerfile
        └── src
            └── ....
        ├── package.json
        ├── package-lock.json
        └── ...

При сборке контейнера я получаю сообщение об ошибке.

ОШИБКА: не удалось создать службу 'сервер': сбой копирования: stat /var/lib/docker/tmp/docker-builder791989542/package.json: такого файла или каталога нет

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

COPY ./../package.json .
COPY ./../package-lock.json .

Но я также получил ошибку

ОШИБКА: не удалось создать службу 'сервер': Сбой COPY: запрещенный путь вне контекст сборки: ../package.json ()

Как указать docker, чтобы он искал файлы не в папке docker, где находится файл dockerfile, но в папке sr c, где находятся мои package-lock. json и package. json файлы расположены

Я создал файл docker -compose.yml.

version: "3.3"

services:

  server:
    container_name: server
    command: 
      - npm
      - run
      - start:dev
    build:
      context: ./server/docker
      dockerfile: dockerfile
    environment:
      PORT: 8081
    ports:
      - 8081:8081
    restart: on-failure
    volumes:
      - ./server:/src/

Ответы [ 2 ]

2 голосов
/ 14 января 2020

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

Прямо из docker документов,

COPY подчиняется следующим правилам:

  • Путь должен быть внутри контекста сборки; вы не можете скопировать ../something / что-то , потому что первым шагом сборки docker является отправка каталога контекста (и подкаталогов) демону docker.
1 голос
/ 14 января 2020

Как объяснено ранее в комментариях и предыдущих ответах, вы не можете копировать файлы, которые находятся вне контекста сборки. Поэтому вам нужно либо изменить контекст вверх по пути к каталогу, либо переместить необходимые файлы в текущий контекст.

Если посмотреть на ваш макет, я бы go выбрал первое решение и по умолчанию использовал бы ваш базовый каталог. в качестве контекста (как только вы поймете решение, вы можете адаптировать context и dockerfile к вашим точным потребностям).

В вашем Dockerfile измените следующие строки:

COPY ./server/package.json .
COPY ./server/package-lock.json .

Примечание : строка COPY . . должна быть удалена (или вам нужно лучше объяснить, что вы на самом деле пытаетесь достичь с помощью этого)

Раздел сборки в вашем docker-compose.yml файл должен выглядеть так:

    build:
      context: .
      dockerfile: server/docker/Dockerfile

Эквивалентная ручная сборка будет

cd /path/to/my-app
docker build -f server/docker/Dockerfile .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...