为什么当我切换到不同的用户环境变量时会丢失?

时间:2016-05-02 09:12:40

标签: docker dockerfile

第一个容器设置用户泊坞窗的PATH

FROM ubuntu:15.10
USER root
RUN groupadd -r docker && useradd -r -g docker docker
USER docker
ENV PATH /hello-world:$PATH

第二个容器

FROM step_1
USER root
RUN echo $PATH

当我进入第二个容器并切换到用户docker时,PATH变量被重置。如果在第二个容器中,我没有切换到root用户,变量保持保存。 为什么会这样?我如何为所有用户docker保存变量PATH?

命令日志:

docker build -t step_1 step_1/
docker build -t step_2 step_2/
docker run -it step_2 bash
root@0784c73a84e2:/# echo $PATH
/hello-world:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
su docker
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

2 个答案:

答案 0 :(得分:0)

您为多个帐户设置了$PATH变量。为什么要在Docker容器中使用多个系统用户?我不确定你试图实现什么,但我认为这将违背单一用途容器的概念。

如果您只想在构建过程中以特权用户身份执行某些命令,则不必切换用户也不必使用sudo。除非另有说明,否则Dockerfile中的每个命令都以root身份执行。

答案 1 :(得分:0)

FROM ubuntu:15.10
USER root

没有做任何事情,你已经在容器内扎根了。

Per the docsENV变量集在图像之间保持不变:

  

从结果图像运行容器时,使用ENV设置的环境变量将保持不变。您可以使用docker inspect ...

查看值

忽略以上所有内容,我无法复制此问题,它对我来说很好。你可以粘贴你的完整Dockerfiles和你正在运行的命令来构建等......?