以下是docker-compose.yml
文件的典型结构:
version: "3.7"
services:
serv1:
build: ./serv1
ports:
- 4040:40
env_file:
- ./docker.env
serv2:
build: ./serv2
ports:
- 3000:3000
env_file:
- ./docker.env
serv3:
build: ./serv3
ports:
- 5000:5000
env_file:
- ./docker.env
字符串
我在一个docker.env
文件中设置了一些env变量,我想使用它,我有两个问题:
1.尝试使用主机上的端口,所以
serv1:
ports:
- "${SERV1_PORT}:40"
env_file:
- ./docker.env
...
serv2:
ports:
- "${SERV2_PORT}:40"
env_file:
- ./docker.env
型
但当我构建时,我得到了以下结果:
WARN[0000] The "SERV1_PORT" variable is not set. Defaulting to a blank string.
型
1.除了在每个服务上包含env_file:
,是否有一种方法可以通过只包含一次来在我的docker-compose上指定“全局”env文件?意思是这样的:
services:
serv1: ...
serv2: ...
...
env_file:
- ./docker.env # these variables to be accessible in all
型
3条答案
按热度按时间ehxuflar1#
env_file
设置的环境变量 * 在容器中 * 可用,而不是在docker-compose.yml
中。为此,您需要.env
文件;阅读更多关于Environment variables in docker compose的信息。替换Compose文件中的环境变量
可以在shell中使用环境变量来填充Compose文件中的值:
字符串
如果有多个环境变量,可以将它们添加到名为.env的默认环境变量文件中,或者使用--env-file命令行选项提供环境变量文件的路径来替换它们。
zbwhf8kr2#
在前面的有效答案之上,您还可以发出
docker compose config
命令来查看任何ENV是如何根据您的意愿被替换(或未被替换)的。b1payxdu3#
除了正确的答案,我强烈建议你在docker compose堆栈中加入“合理的”默认值。这将允许你的团队和其他开发人员加快堆栈的开发速度,同时也为他们提供定制的机会。
这可以像这样完成:
字符串