Docker从env_file而不是默认.env文件组成extra_hosts

时间:2019-09-30 15:09:24

标签: docker docker-compose

我正在使用docker-compose文件的版本2。

是否可以从env_file读取extra_hosts?

我已经在一个环境变量文件中为所有docker-compose定义了公共变量。

样品:-

version: '2'
workspace:
  env_file:
    - "../shared_environment/shared_variables.env"
  extra_hosts:
    - "dockerhost:${DOCKER_HOST_IP}"
    - "windowshost:${WINDOWS_HOST_IP}"

当我运行docker-compose config时,它具有以下输出。

workspace:
environment:
  DOCKER_HOST_IP: 192.168.99.100
  WINDOWS_HOST_IP: 192.168.99.1
extra_hosts:
- 'dockerhost:'
- 'windowshost:'

所以在上面的输出中,我能够看到它正在读取文件,但是之后我如何在extra_hosts中使用它呢?

2 个答案:

答案 0 :(得分:1)

env_file配置将环境变量从外部文件传递到服务的容器。参见The “env_file” configuration option

extra_hosts文件中的docker-compose.yml使用variable substitution

  

Compose使用shell环境中的变量值,其中   docker-compose运行。

要为extra_hosts配置IP,可以在.env文件中设置值,也可以在运行export DOCKER_HOST_IP=192.168.99.100的shell中将它们导出(例如,docker-compose)。 / p>

  

您可以使用.env文件设置环境变量的默认值。   在shell环境中设置的值将覆盖.env中设置的值   文件。

.env文件的内容:

DOCKER_HOST_IP=192.168.99.100
WINDOWS_HOST_IP=192.168.99.1

答案 1 :(得分:0)

您可以将 .env 中的变量替换为 extra_hosts。它工作正常。

步骤:

  1. 使用您的 IP 创建一个 .env 文件
  2. 使用 docker-compose.yml 文件中的变量名称

实践中:

  1. $ touch .env

  2. 内容:EXTERNAL_HOST=1.2.3.4

  3. 将额外的主机定义添加到您的 docker-compose.yml 文件中:

    extra_hosts:
      - "internal-host:${EXTERNAL_HOST}"
    

验证:

  1. 使用 docker exec -it <container-name> /bin/bash
  2. 登录您的容器
  3. cat /etc/hosts

结果:

127.0.0.1   localhost
...
1.2.3.4 internal-host
...