【问题标题】:Set extra host in environment variables在环境变量中设置额外的主机
【发布时间】:2016-09-09 14:51:59
【问题描述】:

我正在使用 docker compose 来运行我的应用程序。为此,我需要在容器内设置主机(这取决于我正在运行的环境)。

我的做法是:

创建环境文件并设置变量:

#application.env
SERVER_IP=10.10.9.134

我的 docker compose 文件如下所示:

version: '2'
services:

  api:
    container_name: myApplication
    env_file:
      - application.env
    build: ./myApplication/
    entrypoint: ./docker/api-startup.sh
    ports:
      - "8080:8080"
    depends_on:
      - redis    
    extra_hosts: &extra_hosts
      myip: $SERVER_IP

但我的问题是变量 SERVER_IP 永远不会被替换。

当我运行 docker-compose config 时,我看到:

services:
  api:
    build:
      context: /...../myApplication
    container_name: myApplication
    depends_on:
    - redis
    entrypoint: ./docker/api-startup.sh
    environment:
      SERVER_IP: 10.10.9.134
    extra_hosts:
      myip: ''
    ports:
    - 8080:8080

我尝试使用 $SERVER_IP 或 ${SERVER_IP} 替换变量引用,但没有成功。

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    我创建了一个文件 .env,添加了单行 HOST=test.example.com,然后在 docker-compose 中执行此操作:

    extra_hosts:
    - myip:${HOST}
    

    docker-compose config 然后显示

      extra_hosts:
          myip: test.example.com
    

    为此,我遵循了 Docker-compose environment variables 关于 .env 文件部分的文档

    更新

    根据 Docker 文档,

    注意:如果您的服务指定了构建选项,则在 环境文件在构建过程中不会自动可见。 使用 build 的 args 子选项来定义构建时环境 变量。

    这基本上意味着如果你把你的变量放在.env文件中,你可以用它们替换docker-compose.yml,但是如果你对特定容器使用env_file选项,你只能看到Docker里面的变量容器,而不是在构建期间。这也是合乎逻辑的,env_file 替换了docker run --env-file=FILE ...,仅此而已。

    因此,您只能将值放入.env。或者,正如 William 所述,您可以使用主机的环境变量。

    【讨论】:

    • 你使用的是哪个版本的 docker 和 docker compose?
    • 有趣的是,如果我使用 env_file 选项,就像在您的示例中一样,此解决方案将停止替换。调查。看起来env_file 并不是要提供替换,只是在容器中设置环境变量。 Docker 1.12.0-a.
    【解决方案2】:

    编辑

    尝试以下方法:

    version: '2'
    services:
      api:
        container_name: myApplication
        env_file:
          - application.env
        build: ./myApplication/
        entrypoint: ./docker/api-startup.sh
        ports:
          - "8080:8080"
        depends_on:
          - redis    
        extra_hosts:
          - "myip:${SERVER_IP}"
    

    确保大括号和主机操作系统上存在环境变量。

    【讨论】:

    • 你试过导出你的服务器IP吗? : 导出 SERVER_IP=10.10.9.134
    • 是的 - 对不起,我假设在运行 docker compose 的机器上也定义了 SERVER_IP
    猜你喜欢
    • 2016-07-15
    • 2018-02-23
    • 2022-06-13
    • 2016-03-30
    • 1970-01-01
    • 2013-02-27
    • 2018-12-22
    • 1970-01-01
    • 2021-12-16
    相关资源
    最近更新 更多