一、在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
相关资料: