docker-compose变量替换/插值与列表,映射或数组值

时间:2018-06-19 01:50:41

标签: docker docker-compose

如何在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

这是不可能的吗?有没有人知道一种解决方法?

1 个答案:

答案 0 :(得分:0)

至少在这个时候(2018年6月),Docker仍然不支持此功能。我可以使用envsubst解决该问题。

envsubstgettext的一部分,可以用来替换您告诉它的环境变量。

调整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文件的变量替换语法的其他变量。