Docker變量的相關總結


 

一、AVG與ENV

 1、在Dockerfile中,使用ARG與ENV的區別

ARG:ARG定義的變量用於構建Docker鏡像,在通過build把Dockerfile構建成鏡像后,ARG定義的變量便不在起作用;    
ENV:ENV定義的變量用於容器的環境變量,在Dockerfile里定義后,在容器的運行時是可以使用這個變量的


上面可能讀起來比較繞,看下這個實例就明白了:

1)Dockerfile里有如下兩行

ARG VAR_A=1
ENV VAR_B ${VAR_A}


2)通過構建鏡像並啟動容器后,查看環境變量如下

$ docker exec ContainerID env
VAR_B=1

 

3)從實例可看出,ARG定義的變量在Dockerfile中使用,構建完鏡像后,就下崗;而ENV定義的變量會帶入容器的環境變量。

可以用一張圖來表示ARG與ENV的作用域:



2、通常可以把ARG與ENV結合使用

ARG buildtime_variable=default_value
ENV env_var_name=$buildtime_variable 


使用這種方式可以解決Dockerfile硬編碼的問題,比如在微服務下很多服務的情況下,構建一個鏡像修改一次Dockerfile,而使用這種方式Dockerfile是不變的,只需要在docker build的時候加上參數值就可以。

 

二、傳遞環境變量的方法

1)Dockerfile文件里通過ENV指定

2)docker [option] -e VAR_NAME=VALUE指定,如果build的Dockerfile文件里有,將會覆蓋

3)docker service update --env-add VAR_NAME=VALUE 添加

 

三、查看環境變量的方法

1、通過docker exec命令查看

$ docker exec ContainerID env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=lile
LANG=en_US.UTF-8
JAVA_VERSION=8
......

 

2、通過docker inspect方式查看

docker inspect --format='{{.Config.Env}}' ContainerID

 

3、進入容器通過/proc/PID/environ的方式

$ cat /proc/1/environ

 

四、其他

通過docker inspect可用通過--format指定獲取值,可用不用對返回的JSON通過代碼做分析;如:獲取機器的IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ContainerID

 

相關資料:


免責聲明!

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



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