使用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容器的主要内容,如果未能解决你的问题,请参考以下文章

怎样获取docker容器的环境变量

Docker学习重点~docker 部署环境

dockerfile 容器添加 环境变量

docker容器的内存问题排查(“内存丢失”)

docker容器可执行文件不能执行

如何恢复环境变量的默认设置