簡體   English   中英

Docker使用環境變量來設置額外的主機

[英]Docker compose using environment variables to set extra host

我正在使用docker compose來運行我的應用程序。 為此,我需要在容器內設置主機(這取決於我正在運行的環境)。

我的方法是:

創建環境文件並設置變量:

#application.env
SERVER_IP=10.10.9.134

我的docker撰寫文件看起來像:

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配置時,我看到:

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}替換變量引用,但它不起作用。

我創建了一個文件.env ,添加了單行HOST=test.example.com .env ,然后在docker-compose中做了這個:

extra_hosts:
- myip:${HOST}

docker-compose config然后顯示

  extra_hosts:
      myip: test.example.com

為此,我按照Docker-compose環境變量的文檔關於.env文件的部分

UPDATE

根據Docker文檔,

注意:如果您的服務指定了構建選項,則在構建期間,環境文件中定義的變量將不會自動顯示。 使用build的args子選項來定義構建時環境變量。

它基本上意味着如果將變量放在.env文件中,可以在.env docker-compose.yml使用它們進行替換,但是如果對特定容器使用env_file選項,則只能看到Docker容器內的變量,而不是在構建。 它也是合乎邏輯的, env_file取代了env_file docker run --env-file=FILE ...而沒有別的。

因此,您只能將您的值放入.env 或者,正如William所描述的,您可以使用主機的環境變量。

編輯

請嘗試以下方法:

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}"

確保大括號並且主機操作系統上存在環境變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM