Как мне получить доступ к смонтированному voume из docker -compose в моем Dockerfile? - PullRequest
0 голосов
/ 03 августа 2020

Я использую Docker 19. Это есть в моем файле docker -compose.yml. Я пытаюсь смонтировать том со своей локальной машины ...

  python:
    build: ./
    env_file: /Users/davea/Documents/workspace/my_python_project/tests/.test_env
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=${LOCAL_DB_PASSWORD}
      - DB_HOST=sql-server-db
      - DB_NAME=${LOCAL_DB_DB}
      - DB_USER=${LOCAL_DB_USERNAME}
      - DB_PASS=${LOCAL_DB_PASSWORD}
      - DB_PORT=1433
    volumes:
    - /Users/davea/Documents/workspace/my_python_project:/my-app
    depends_on:
      - sql-server-db

Как мне указать этот том в моем Dockerfile? Я пробовал это

WORKDIR /my-app
...
RUN pip3 install -r /my-app/requirements.txt

, но получаю эту ошибку

ERROR: Could not open requirements file: [Errno 2] No such file or directory: '/my-app/requirements.txt'

Я подтвердил, что «/Users/davea/Documents/workspace/my_python_project/requirements.txt» является допустимым файлом в моей системе.

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Нет. Тома предназначены для хранения данных , а не кода; вы должны COPY ваш код в образ и удалить строку volumes:.

Обычный минимальный Python Dockerfile может выглядеть так:

FROM python:3.8
WORKDIR /my-app
COPY . ./
RUN pip3 install -r requirements.txt
CMD ["./my-app.py"]

Поскольку COPY присутствует строка, изображение содержит все необходимое для запуска, включая собственный код и команду по умолчанию. Это означает, что он доступен во время сборки, и это означает, что вы можете удалить блок volumes: из своего файла docker-compose.yml.

Многие из вещей, которые вы можете указать в docker-compose.yml, просто не отображаются или доступен во время сборки. Сюда входят параметры томов, сетей и переменных среды; ваша сборка не может подключаться к другим контейнерам.

0 голосов
/ 03 августа 2020

Не уверен, какова ваша мотивация, но я не думаю, что вы можете привязать том во время сборки, поэтому идея не сработает.

В качестве альтернативы, если ваша мотивация состоит в том, чтобы сделать его динамичным c (возможно, файл требований Dynami c), тогда вы можете использовать ARGS:

ARG REQ_FILE=requirements.txt
ADD $REQ_FILE .  # assuming you already are inside your my-app workdir
...
RUN pip3 install -r $REQ_FILE

И с этим просто запустите build:

docker build --build-arg REQ_FILE=requirements.txt ...
...