如何对 docker-compose.yml
中的列表、映射或数组值使用变量替换文件。
例如:
graylog:
image: graylog2/server2
extra_hosts: ${EXTRA_HOSTS}
和
export EXTRA_HOSTS="['host1:10.10.10.1','host2:10.10.10.2']"
给出以下错误:
graylog.extra_hosts must be a mapping
我已经尝试了上述不同的变体,但没有运气。
我确实看到这里有一个悬而未决的问题:https://github.com/docker/compose/issues/4249
这是不可能的吗?有谁知道解决方法?
最佳答案
至少截至目前(2018 年 6 月),Docker 仍然不支持这一点。我能够利用 envsubst
解决这个问题。 .envsubst
是 gettext
的一部分它只能用于替换您告诉它的环境变量。
调整 docker-compose.yml
value 看起来像一个数组或 map (括号或花括号),但该值是一个环境变量。
例如
graylog:
image: graylog2/server2
extra_hosts: [ ${EXTRA_HOSTS} ]
然后,定义不带括号或花括号的环境变量。例如:
export EXTRA_HOSTS="'host1:10.10.10.1','host2:10.10.10.2'"
然后利用 envsubst
envsubst '${EXTRA_HOSTS}' < docker-compose.yml > docker-compose.subst.yml && docker stack deploy -c docker-compose.subst.yaml foobar
请注意,您通过 '${EXTRA_HOSTS}'
至 envsubst
.这告诉它只替换这个环境变量。这确保它不会意外替换一些其他使用 Docker 撰写文件的变量替换语法的变量。
关于docker-compose 变量替换/插值与列表、映射或数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50919605/