docker-compose - ошибка ADD: запрещенный путь вне контекста сборки - PullRequest
0 голосов
/ 21 января 2019

У меня такая структура папок

project
    - config
        -docker
           Dockerfile
           docker-compose.yml
    - src
       here_is_code
    requirements.txt

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD ../../requirements.txt /code/
RUN pip install -r requirements.txt
ADD src /code/

docker-compose.yml

version: '3'

services:
  web:
    build:
      context: ../../
      dockerfile: config/docker/Dockerfile
    command:
        bash -c "ls"
    volumes:
      - .:/code
    expose:
      - "8000"
  nginx:
    image: nginx
    ports:
    - "8000:8000"
    volumes:
      - .:/code
      - ./config/nginx:/etc/nginx/conf.d
    depends_on:
    - web

Когда я запускаю docker-compose build, я получаю следующееошибка:

Не удалось создать службу 'web': ошибка ADD: Запрещенный путь вне контекста сборки: ../../requirements.txt ()

IsЕсть ли возможность добавить require.txt или мне придется скопировать этот файл в каталог Docker?Или, может быть, мне нужно использовать любую точку входа (entrypoint.sh)?

ОБНОВЛЕНИЕ

После docker build -f config/docker/Dockerfile . и docker-compose up Я не вижу там свой код.Вот вывод ls -R /code

web_1    | /code:
web_1    | Dockerfile
web_1    | config
web_1    | docker-compose.yml
web_1    | src
web_1    | static
web_1    | 
web_1    | /code/config:
web_1    | nginx
web_1    | 
web_1    | /code/config/nginx:
web_1    | 
web_1    | /code/src:
web_1    | static
web_1    | 
web_1    | /code/src/static:
web_1    | 
web_1    | /code/static:

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Надеюсь, мой ответ кому-нибудь поможет (он основан на многих репозиториях GitHub, хотя я уже посмотрел)

У меня неправильная структура проекта.Если вам нужно разделить файлы Docker и код приложения, лучше поместить код в любую папку (например, app) в корневую папку.Файлы Docker также должны находиться в корневой папке.Такая структура позволит избежать множества проблем и будет легко использовать docker / docker-compose

0 голосов
/ 07 марта 2019

контекст

Все дело в контексте. Укажите контекст и файл Docker в своей сборке, и вы можете установить свой Dockerfile где угодно. Сыграйте с ней в раунд (вот что она сказала).

Я бы по крайней мере сохранил docker-compose.yaml в корневом каталоге.


build:
  context: .
  dockerfile: dockerfiles/project-one/Dockerfile

0 голосов
/ 21 января 2019

Вы не можете выйти за пределы контекста сборки (который обычно является рабочим каталогом) Docker при построении образа.

Причина довольно проста - Docker состоит из клиента командной строки и демона, когда вы вызываете docker build ... Первое, что происходит, - ваш клиент упаковывает всю папку (контекст сборки) в один архив и отправляет ее демону вместес вашим Dockerfile.Демон получает архив и инструкции от Dockerfile, а это означает, что демон не обращается к вашей локальной файловой системе при построении образа и не может просматривать ../.. ссылки.

Что вам нужно дляустановите контекст сборки для вашей корневой папки и явно укажите Dockerfile.

Ваша команда сборки будет выглядеть как

docker build -f config/docker/Dockerfile .

А внутри Dockerfile вы должны помнить, что все пути относительнов корень проекта.

Итак, наконец, вы пришли к следующему файлу compose:

docker-compose.yml

version: '3'
services:
  web:
    build:
      context: .  # here changed
      dockerfile: config/docker/Dockerfile
    command: ["bash", "-c", "ls"]
    expose:
      - "8000"
  nginx:
    image: nginx
    ports:
      - "8000:8000"
    depends_on:
      - web

Вы идете в проектroot и запустить

docker-compose -f config/docker/docker-compose.yml up
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...