如何从我的 Dockerfile 中的 docker-compose 访问已安装的卷?

How do I access a mounted voume from docker-compose in my Dockerfile?

我正在使用 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

如何在我的 Docker 文件中引用此卷?我试过这个

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”是我系统上的有效文件。

不确定你的动机是什么,但我不认为你可以在构建时绑定卷,所以这个想法行不通。

或者,如果您的动机是使其动态化(可能是动态需求文件),那么您可以使用 ARGS:

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

然后 运行 构建:

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

你不知道。卷旨在容纳 数据 ,而不是代码;你应该 COPY 你的代码到你的图像中并删除 volumes: 行。

一个非常常规的最小 Python Dockerfile 可以看起来像:

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

由于存在 COPY 行,图像包含 运行 本身所需的一切,包括它自己的代码和默认命令。这意味着它在构建时可用,也意味着您可以从 docker-compose.yml 文件中删除 volumes: 块。

您可以在 docker-compose.yml 中指定的许多内容在构建时是不可见或不可访问的。这包括卷、网络和环境变量设置;您的构建无法连接到其他容器。