我们在运行docker容器应用程序时,需要使用特定的环境变量,并希望环境变量持久化生效,无非从dockerfile和容器入手,
一、dockerfile 添加环境变量
(1) dockerfile ENV 设置环境变量,该方式直接将变量生成到镜像中
ENV PATH=/usr/loca/mysql/bin:$PATH LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH
(2) dockerfile CMD/RUN / ENTRYPOINT
CMD export PATH=/usr/local/mysql:$PATH
或
RUN export PATH=/usr/local/mysql:$PATH
或
ENTRYPOINT export PATH=/usr/local/mysql:$PATH
二、使用容器添加环境变量
注意,使用容器添加环境变量,如果需要保存到镜像,需要使用docker commit 提交容器的读写层,变成只读层。
(1) 启动容器是指定环境变量
docker run -dti -e PATH=/usr/local/mysql/bin:$PATH --rm 镜像ID
或者
docker run -tid --env PATH=/usr/local/mysql/bin:$PATH --rm 镜像ID
多个变量,使用多个-e / –env 标记
(2)进入容器内部,添加需改环境变量
docker exec -ti 容器ID/容器名 /bin/bash
可在如下文件内容添加变量
- ~/.bashrc
- ~/.profile
- ~/.bash_profile
- /etc/profile
- /etc/environment
- /etc/bash.bashrc
添加方法:在文件末尾添加类似:
export PATH=/usr/local/mysql/bin:$PATH
添加完成后,使文件生效, 这一步很重要
source 修改的文件
然后可调用 echo 查看
root@363aae75095b:/# echo $PATH
/usr/local/mysql/bin:/usr/local/cuda-9.0/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
root@363aae75095b:/#
最后一步,提交容器为镜像
docker commit -a 作者 -m 提交日志 -t 容器名或ID 仓库名:镜像版本
此步骤之后,环境变量就保存到镜像中,可启动镜像,生成容器,然后进入查看验证。
总结
docker 容器环境变量修改,可从两个方面入手,dockerfile 和 容器。两种均有利弊。
使用dockerfile,导致镜像的移植性降低,只要基于该dockerfile 创建的镜像,都保存该变量,二使用容器修改环境变量,容器一旦停止,变量清除。再次启动需要重新配置,如需要变量持久化,则需要保存容器为镜像。
1、使用 dockerfile 创建环境变量时,建议最好使用ENV,但这种方式降低了镜像移植性。
2、进入容器内创建变量,注意使用 source 具体文件 使变量生效。
3、容器启动时,指定环境变量。
建议使用 3. 在容器启动时,设置环境变量。