在docker-compose.yml文件中获取或设置envvariables

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

 extra_hosts: - "localhost:${MY_MACHINE_IP}" 

如果我之前将MY_MACHINE_IP定义为环境variables,它将起作用。

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

 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。 variables与值=我的docker机器ip。

可能吗?

是根据docker文件

 docker-compose run SERVICE env 

所以我认为这些变数不像你想的那样是全球性的。 你必须将它们作为parameter passing。 阅读这个 。

你可以使用包ruamel.dcw (Docker Compose Wrapper的dcw ,声明:我是该包的作者)。 它允许您在docker-compose.yaml文件中创build一个包含关键user-data的部分,该文件在将文件交给普通的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} ,并可以使用环境variables覆盖这些默认值。

该实用程序还写出一个文件.dcw_env_vars.inc ,您可以将其复制到您的容器和源中,以获取适当的值到您在Dockerfile RUN脚本中