在Docker中将secret env变量存储为单独的数据容器
我想在docker compose中使用来自主机操作系统的“secret”(密码等)环境变量 我认为使用数据容器可以实现这一点。但它不起作用-“没有文件存在”。请告知问题所在,以及这样做是否可行 docker-compose.yml在Docker中将secret env变量存储为单独的数据容器,docker,docker-compose,Docker,Docker Compose,我想在docker compose中使用来自主机操作系统的“secret”(密码等)环境变量 我认为使用数据容器可以实现这一点。但它不起作用-“没有文件存在”。请告知问题所在,以及这样做是否可行 docker-compose.yml version: '2' services: web: build: . command: bundle exec puma env_file: .env environment: - RACK_ENV=product
version: '2'
services:
web:
build: .
command: bundle exec puma
env_file: .env
environment:
- RACK_ENV=production
- RAILS_ENV=production
volumes_from:
- config
ports:
- "3000:3000"
links:
- db
config:
image: busybox
volumes:
- /myapp/config/.env:.env
我还尝试使用/myapp/config:/config
作为卷,使用/config/.env
作为env_文件,但结果相同
Dockerfile没有以任何方式提及或引用“config”或“.env”
感谢您的回复。撰写环境文件
env_文件
由运行它的目录中的docker compose
本地读取。然后在运行时将变量传递给容器(如docker run-e
)
替代
还可以将Compose添加到配置中
如果在使用如下环境定义运行docker compose
时在主机上设置了SECRET\u HOST\u ENV\u变量
web:
build: .
command: bundle exec puma
environment:
- RACK_ENV=production
- RAILS_ENV=production
- SECRET_ENV_VARIABLE=${SECRET_HOST_ENV_VARIABLE}
ports:
- "3000:3000"
links:
- db
SECRET\u ENV\u变量
将在容器环境中可用 您能解释一下为什么要尝试执行主机映射文件->配置容器->web容器吗?为什么不只是映射文件->web容器?另外,如果容器进程只需要环境中可用的环境变量(与实际文件相反),您可以通过Compose YAML将主机环境变量映射到容器中(就像您映射了-e
)。如果这是您真正想要的,我很乐意用一个例子来创建一个答案。如果您有一个env变量,它已经不是秘密了——在多个进程的内存中可能有多个副本。如果您担心对系统上的其他实体隐藏它,请使用具有高度受限访问权限的配置文件或专用工具。
web:
build: .
command: bundle exec puma
environment:
- RACK_ENV=production
- RAILS_ENV=production
- SECRET_ENV_VARIABLE=${SECRET_HOST_ENV_VARIABLE}
ports:
- "3000:3000"
links:
- db