Docker-Compose通過文件聲明默認的環境變量


寫文目的

在寫本文之前,我在做一個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,配置文件中的值會被覆蓋


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM