一、在Dockerfile中,使用ARG與ENV的區別docker
ARG:ARG定義的變量用於構建Docker鏡像,在經過build把Dockerfile構建成鏡像後,ARG定義的變量便不在起做用;
ENV:ENV定義的變量用於容器的環境變量,在Dockerfile裏定義後,在容器的運行時是可使用這個變量的微服務
上面可能讀起來比較繞,看下這個實例就明白了:ui
1)Dockerfile裏有以下兩行編碼
ARG VAR_A=1 ENV VAR_B ${VAR_A}
2)經過構建鏡像並啓動容器後,查看環境變量以下spa
$ docker exec ContainerID env VAR_B=1
3)從實例可看出,ARG定義的變量在Dockerfile中使用,構建完鏡像後,就下崗;而ENV定義的變量會帶入容器的環境變量。code
能夠用一張圖來表示ARG與ENV的做用域:orm
二、一般能夠把ARG與ENV結合使用blog
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 添加get
一、經過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 ......
二、經過docker inspect方式查看
docker inspect --format='{{.Config.Env}}' ContainerID
三、進入容器經過/proc/PID/environ的方式
$ cat /proc/1/environ
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ContainerID
相關資料: