【问题标题】:Docker Compose extra_hosts from env_file and not from default .env fileDocker Compose extra_hosts 从 env_file 而不是默认的 .env 文件
【发布时间】:2019-09-30 15:09:24
【问题描述】:

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

是否可以从 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 中使用它?

【问题讨论】:

  • 只需调用容器内的DOCKER_HOST_IPDOCKER_HOST_IP:PORT 即可访问容器内的另一个容器
  • 你好 @Adiii 我是 docker 的新手,你能发布示例吗?我尝试使用它,但它有如下错误消息。添加主机中的 IP 地址无效:“DOCKER_HOST_IP”

标签: docker docker-compose


【解决方案1】:

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

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

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

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

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

.env 文件内容:

DOCKER_HOST_IP=192.168.99.100
WINDOWS_HOST_IP=192.168.99.1

【讨论】:

【解决方案2】:

您可以使用来自.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. cat /etc/hosts

结果:

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

【讨论】:

    猜你喜欢
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 2018-07-07
    • 2021-04-07
    • 2016-10-25
    • 1970-01-01
    相关资源
    最近更新 更多