首页 > 解决方案 > 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

这是不可能的吗?有谁知道解决方法?

标签: dockerdocker-compose

解决方案


至少在这个时候(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 撰写文件的变量替换语法的其他变量。


推荐阅读