docker-compose.yml与多个env_files
我试图得到一个.env
-compose文件与多个.env
文件,我没有任何运气。 我试图设置三个.env
文件:
- 在所有容器实例中相同的全局设置
- 环境特定的设置(东西只是为了testing或开发)
- 本地设置 – 开发人员在与端口号发生冲突的情况下可能需要更改的可重写事项
我docker-compose.yml
文件如下所示:
version: '2' services: db: env_file: - ./.env - ./.env.${ENV} - ./.env.local image: postgres ports: - ${POSTGRES_PORT}:5432
.env
看起来像这样:
POSTGRES_USER=myapp
和.env.development
看起来像这样:
POSTGRES_PASSWORD=supersecretpassword POSTGRES_HOST=localhost POSTGRES_PORT=25432 POSTGRES_DB=myapp_development
.env.local
在这种情况下不存在。
运行ENV=development docker-compose up
,我收到以下输出:
$ ENV=development docker-compose up WARNING: The POSTGRES_PASSWORD variable is not set. Defaulting to a blank string. WARNING: The POSTGRES_DB variable is not set. Defaulting to a blank string. WARNING: The POSTGRES_PORT variable is not set. Defaulting to a blank string. ERROR: The Compose file './docker-compose.yml' is invalid because: services.db.ports is invalid: Invalid port ":5432", should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol]
从这个错误信息,它看起来像我的环境variables没有被使用。 我刚刚升级到最新的可用docker组成 – 同样的错误:
$ docker-compose --version docker-compose version 1.8.0-rc1, build 9bf6bc6
这里有什么想法? 如果有一个docker-compose.yml
可以在多个环境中工作,那将是非常好的。
阅读本页: https : //docs.docker.com/compose/environment-variables/
从我的理解,你应该做以下几点:
对于全局variables(不应该改变)做一个env文件,如下所示:
VAR1=VALUE1 VAR2=VALUE2
和其他人(可能会改变)你应该添加他们的名字在docker-compose.yml的环境下,像这样:
environment: - VAR1 - VAR2
这将从运行docker-compose的shell中获取VAR1和VAR2值。
我希望这有帮助。
请记住,有2个不同的环境,你正在定义variables。 你正在执行docker-compose命令的主机,以及容器本身(在你的情况下运行数据库服务)。
您docker-compose.yml
文件可以访问您的主机的环境variables。 因此ENV
可以从.env
docker-compose
命令中获得,但不能在.env
文件中获得。
相反, ENV
的值在容器内部是不可访问的,但是.env
文件中定义的所有variables.env
可以的。
我不知道你是否真的需要你的db
容器来访问你的.env.development
定义的variables。 但至less似乎你的主机需要有这个文件的内容,所以当docker-compose命令被调用时, POSTGRES_PORT
variables被定义。
要解决您的具体问题,您需要在主机上定义环境variables,而不仅仅是容器。 你可以做这样的事情:
#Set for host ENV=development #Also sets the variables on the host source ./.env.$ENV #POSTGRES_PORT defined in .env.development is used here docker-compose up #since env_file also contains .env.development, the variables will be reachable from the container.
希望有所帮助。
- 为什么在Docker日志文件中旋转nginx并不是在文件系统中释放?
- 如何恢复docker映像的快照(用于testing目的,在同一个docker映像上的每个testing)
- 使用dockerconfigurationElasticsearch和Kibana
- docker备份和恢复mongodb
- 撰写时无法使用服务名称从(fluentd)login驱动程序进行login
- 如果一个Dockerpipe道插件withRun命令返回一个非零的退出代码,我如何失败一个Jenkins构build?
- 未能升级docker在redhat7上
- Docker Python客户端API副本
- apt-get在Ubuntu 16.04中安装docker image:'/etc/resolv.conf':设备或资源忙