【发布时间】:2018-08-04 17:17:09
【问题描述】:
我正在从事一个涉及 Docker 的小组项目,该项目有一个 .env 文件,如下所示:
DATABASE_URL=xxx
DJANGO_SETTINGS_MODULE=xxx
SECRET_KEY=xxx
这不能在Dockerfile 中声明吗?如果是这样,制作.env 文件有什么好处?
不确定我是否朝着正确的方向前进,但this Docker Docs page 说(强调我自己的):
您的配置选项可以包含环境变量。撰写 使用 shell 环境中的变量值,其中
docker-compose正在运行。例如,假设外壳包含POSTGRES_VERSION=9.3你提供这个配置:
db:`image: "postgres:${POSTGRES_VERSION}"`当您使用此配置运行
docker-compose时,Compose 会在 shell 中查找POSTGRES_VERSION环境变量并将其值代入。对于此示例,Compose 在运行配置之前将图像解析为postgres:9.3。如果未设置环境变量,Compose 将替换为空字符串。在上面的例子中,如果
POSTGRES_VERSION没有设置,图片选项的值为postgres:。您可以使用 Compose 自动查找的
.env文件设置环境变量的默认值。在 shell 环境中设置的值会覆盖在.env文件中设置的值。
如果我们使用.env 文件,那么我不会在docker-compose.yml 文件中看到一些${...} 语法吗?不过,我没有看到类似的东西。
这是我们的docker-compose.yml 文件:
version: '3'
services:
server:
build:
context: ./server
dockerfile: Dockerfile
env_file: .env.dev
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- ./server:/app
ports:
- "8500:8000"
depends_on:
- db
stdin_open: true
tty: true
db:
image: postgres
client:
build:
context: ./client
dockerfile: Dockerfile
command: bash -c "npm install; npm run start"
volumes:
- ./client:/app
- /app/node_modules
ports:
- "3000:3000"
depends_on:
- server
【问题讨论】:
标签: docker docker-compose environment-variables dockerfile