使用exec丢失PATH环境变量进入docker容器

问题描述 投票:1回答:2

这是我的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进程?

docker environment-variables ros
2个回答
3
投票

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

2
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.