寫文目的
在寫本文之前,我在做一個docker-compose項目,這里需要在docker-compose.yml配置中引用到宿主機的ip,然而docker-compose並沒有命令行一個輸入的選項,看了些博客和官方文檔,發現自己定義的如common.env
中定義的鍵值對,只能完全當做環境變量被引用,而不是部分變量。糾結良久,又仔細看了官方文檔,發現了默認的配置,docker也可用,記錄作此文,備忘待查,分享與諸君。
Compose支持使用聲明默認的環境變量的
.env
文件啟動,這個文件的位置需要與docker-compose.yml同級目錄,我們只需要在同級目錄下創建.env
文件來指定默認的環境變量,這些變量可以部分或完整作為配置的內容,大大簡化我們的配置,以及一處修改多處生效的目的
語法規則
- Compose支持.env文件中的每一行都是
KEY=VAL
格式 - 以
#
開頭的內容將被注釋 - 忽略空白行
.env
中的KEY可以在docker-compose.yml
中作為某個VAL
的一部分
測試
這里拿個nginx做測試吧,我們最后使用docker-compose config進行查看當前環境生效的配置
新建並進入目錄test
,創建docker-compose.yml
文件
mkdir test;cd test;vim docker-compose.yml
version: "3"
services:
mynginx:
image: nginx:${TAG}
ports:
- 80:80
如果我們此時直接啟動
docker-compose config
我們會得到如下輸出hellxz@hz:~/test$ docker-compose config WARNING: The TAG variable is not set. Defaulting to a blank string. services: mynginx: image: 'nginx:' ports: - 80:80/tcp version: '3.0'
如你所見,引用的變量不存在被當成空字符串進行賦值
創建.env
文件並保存
# .env the default environment config file
TAG=1.7.9
再次啟動docker-compose config
hellxz@hz:~/test$ docker-compose config
services:
mynginx:
image: nginx:1.7.9
ports:
- 80:80/tcp
version: '3.0'
賦值完成。
另,這個默認的環境變量配置的優先級略低,如果是docker-compose run直接從命令行傳入相同的KEY,配置文件中的值會被覆蓋