在docker-compose.yml文件中获取或设置env变量

时间:2016-08-02 08:37:24

标签: docker environment-variables yaml docker-compose

我有一个docker-compose.yml文件,我在那里定义:

extra_hosts:
- "localhost:${MY_MACHINE_IP}"

如果我先将MY_MACHINE_IP定义为环境变量,那么它就可以了。

我想要实现的是执行以下操作:

extra_hosts:
- "localhost:<get MY_MACHINE_IP from env if it exists, if not set MY_MACHINE_IP env variable with value <docker-machine-ip>>"

换句话说:我想在extra_hosts部分定义它,如果已经指定了MY_MACHINE_IP,则获取它,如果没有 - 设置此env。变量值=我的docker machine ip。

有可能吗?

2 个答案:

答案 0 :(得分:0)

根据docker文档

是的
docker-compose run SERVICE env

所以我认为变量不是全局的,你可能会想到。您必须将它们作为参数传递。 阅读this

答案 1 :(得分:0)

您可以使用程序包ruamel.dcwdcw用于Docker Compose Wrapper,免责声明:我是该程序包的作者)。它允许您在user-data文件中创建一个包含密钥docker-compose.yaml的部分,该部分在将文件交给普通docker-compose之前被删除。该部分可能如下所示:

user-data:
  author: Your Name <your-name@youremail.com>
  description: container for postfix/submission
  env-defaults:
    PORT: 587    # override during development
    NAME: submission
    DOCKER_BASE: /data0/DATA

然后您可以在文件的其余部分使用{PORT}{NAME}{DOCKER_BASE},并可选择使用环境变量覆盖这些默认值。

该实用程序还会写出一个文件.dcw_env_vars.inc,您可以将其复制到容器和源代码中,以便从RUN

中的Dockerfile脚本中获取相应的值