在环境变量中设置额外的主机

7
我将使用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}替换变量引用,但没有成功。
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
10

我创建了一个名为.env的文件,加入了一行HOST=test.example.com,然后在docker-compose中执行了以下操作:

extra_hosts:
- myip:${HOST}

docker-compose config 然后显示

  extra_hosts:
      myip: test.example.com
为了实现这个目标,我遵循了来自Docker-compose环境变量中与.env文件相关的部分的文档。 更新: 根据Docker文档所述,

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

这基本上意味着,如果您将变量放置在.env文件中,可以在docker-compose.yml中使用它们进行替换,但是如果您为特定容器使用env_file选项,则只能在Docker容器内部看到变量,而无法在构建期间看到。这也是合理的,env_file取代了docker run --env-file=FILE ...而已。 因此,您只能将值放置在.env中,或者如William所述,您可以使用主机的环境变量。

你使用的是哪个版本的Docker和Docker Compose? - FedericoAlvarez
有趣的是,如果我使用像你的例子中的env_file选项,这个解决方案就停止替换了。正在调查。看起来env_file并不意味着提供替换,只是在容器中设置环境变量。Docker 1.12.0-a。 - Alex Pakka

1

编辑

请尝试以下操作:

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吗?:export SERVER_IP=10.10.9.134 - Bit-Man
是的 - 抱歉我假设了在运行Docker Compose的机器上也定义了 SERVER_IP。 - William Greenly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,