我正在一个涉及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在外壳程序中寻找POSTGRES_VERSION
环境变量并将其值替换为该变量。对于本示例,Compose将图像解析为postgres:9.3
在运行配置之前。如果未设置环境变量,则Compose替换为空字符串。在上面的示例中,如果未设置
POSTGRES_VERSION
,则图像选项的值为postgres:
。您可以使用
.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
答案 0 :(得分:1)
想法可能有个地方可以将秘密与docker-compose.yml分开,然后您可以将其保存在VCS中和/或共享。