如何从我的 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
中指定的许多内容在构建时是不可见或不可访问的。这包括卷、网络和环境变量设置;您的构建无法连接到其他容器。
我正在使用 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
中指定的许多内容在构建时是不可见或不可访问的。这包括卷、网络和环境变量设置;您的构建无法连接到其他容器。