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

标签 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

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

最佳答案

至少截至目前(2018 年 6 月),Docker 仍然不支持这一点。我能够利用 envsubst 解决这个问题。 .envsubstgettext 的一部分它只能用于替换您告诉它的环境变量。
调整 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/

相关文章:

python - Jenkins + docker

docker - Docker-compose应该运行一次我的入口点脚本然后退出两次

docker - 如何使用 Gitlab CI 在两个阶段的工作期间保持 docker 镜像构建?

docker - Makefile docker 等待数据库准备就绪

docker - 内部和外部网络与docker-compose吗?

Docker:连接到外部数据库

docker - 如何解析 docker 镜像的操作系统平台?

postgresql - 如何使用 postgres docker image 持久化数据?

angular - 从angular2应用程序调用在Docker容器中运行的服务

docker - 在单个 Linux Web 服务器上运行多个 Docker 容器