如何在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
这是不可能的吗?有没有人知道一种解决方法?
答案 0 :(得分:0)
至少在这个时候(2018年6月),Docker仍然不支持此功能。我可以使用envsubst
解决该问题。
envsubst
是gettext
的一部分,可以用来替换您告诉它的环境变量。
调整docker-compose.yml
值使其看起来像数组或映射(括号或花括号),但将其值设置为环境变量。
例如
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 compose文件的变量替换语法的其他变量。