使用exec丢失PATH环境变量进入docker容器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用exec丢失PATH环境变量进入docker容器相关的知识,希望对你有一定的参考价值。
这是我的Dockerfile:
FROM ros:kinetic-ros-core-xenial
CMD ["bash"]
如果我运行docker build -t ros . && docker run -it ros
,然后从容器echo $PATH
,我会得到:
/opt/ros/kinetic/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
如果我exec
进入容器(docker exec -it festive_austin bash
)并运行echo $PATH
,我会得到:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
为什么环境变量不同?如何在具有相同初始环境的容器上获得新的bash进程?
答案
The ENTRYPOINT
command is only invoked on docker run
, not on docker exec
.
我假设这个/ros_entrypoint.sh
脚本负责向PATH
添加内容。如果是这样,那么你可以为docker exec
做这样的事情:
docker exec -it <CONTAINER_ID> /ros_entrypoint.sh bash
另一答案
docker exec
只使用指令ENV
获取Dockerfile中定义的环境变量。使用docker exec [...] bash
你还可以获得为bash
定义的那些。
将此行添加到Dockerfile:
ENV PATH=/opt/ros/kinetic/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
或更短:
ENV PATH=/opt/ros/kinetic/bin:$PATH
以上是关于使用exec丢失PATH环境变量进入docker容器的主要内容,如果未能解决你的问题,请参考以下文章