![](/img/trans.png)
[英]Environment variables are not set in docker container using docker-compose.yml
[英]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.