一、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
相關資料: