Docker compose Docker如何在构建期间在Dockerfile中使用env_文件变量
我想在我的Docker compose Docker如何在构建期间在Dockerfile中使用env_文件变量,docker-compose,dockerfile,Docker Compose,Dockerfile,我想在我的Dockerfile中使用env_文件中的STAGE变量。大多数帖子建议只使用-e和docker compose up命令,但我希望通过env_文件实现这一点 我尝试添加args,但不起作用 环境文件 STAGE=DEV FROM python:3.6 ENV PYTHONUNBUFFERED 1 (...) RUN pip install -r project/requirements/$STAGE.txt docker compose.yml version: '2' ser
Dockerfile
中使用env_文件中的STAGE
变量。大多数帖子建议只使用-e
和docker compose up
命令,但我希望通过env_文件实现这一点
我尝试添加args
,但不起作用
环境文件
STAGE=DEV
FROM python:3.6
ENV PYTHONUNBUFFERED 1
(...)
RUN pip install -r project/requirements/$STAGE.txt
docker compose.yml
version: '2'
services:
web:
build: .
env_file:
- /etc/web.env
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- ./backend:/code
ports:
- "8000:8000"
Dockerfile
STAGE=DEV
FROM python:3.6
ENV PYTHONUNBUFFERED 1
(...)
RUN pip install -r project/requirements/$STAGE.txt
结果应该是:
RUN pip install -r project/requirements/DEV.txt
我发现在构建过程中这是不可能的,但可能存在一些方法来做到这一点。任何提示我都会很有帮助。您可以通过在docker compose yaml文件中添加环境
选项,将环境变量映射到容器中:
version: '2'
services:
web:
build: .
env_file:
- /etc/web.env
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- ./backend:/code
ports:
- "8000:8000"
environment:
- STAGE: ${STAGE}
我之前尝试过它,收到:错误:撰写文件“/docker Compose.yml”无效,因为:services.web.environment包含{“STAGE”:“”},这是一种无效类型,它应该是字符串
这是因为本地环境中未设置STAGE
env var。在运行docker compose up
(将envfile
替换为您的环境文件名)之前,您可以运行export$(cat envfile | grep-v'^#')
。上述方法是在本地计算机中设置环境变量,然后将它们映射到docker容器中。另一种可行的方法是将env文件映射到容器中并导出它们。您可以在卷
设置中添加一行-/envfile:/code/envfile
,然后执行运行导出$(cat/code/envfile | grep-v'^#')和&pip安装…
很遗憾,我无法访问我的环境文件
,即使它在卷
中。然后尝试第一种方法(从本地文件导出,并将环境变量映射为环境到容器中)尝试使用参考的参数