如果我在/root/.bashrc中包含以下行:
export $A = "AAA"
然后,当我以交互方式运行docker容器(docker run -i)时,$ A变量将保留其值。但是,如果我以分离模式运行容器,则无法访问该变量。即使我运行容器明确像.bashrc那样采购
docker run -d my_image /bin/bash -c "cd /root && source .bashrc && echo $A"
这样的行产生一个空的输出。
那么,为什么会这样呢?以及如何设置.bashrc文件中定义的环境变量?
任何帮助将不胜感激!
最佳答案
第一个问题是您正在运行的命令的主机 shell 程序(而不是容器 shell 程序)解释了$A
。在您的主机上,$A
可能是黑色的,因此您的有效命令将变为:
docker run -i my_image /bin/bash -c "cd /root && source .bashrc && echo "
完全按照它说的做。我们可以对变量进行转义,以便将其发送到容器并在其中正确求值:
docker run -i my_image /bin/bash -c "echo \$A"
但这也将是空白的,因为尽管容器是容器,但 shell 未处于交互模式。但是我们可以强制它为:
docker run -i my_image /bin/bash -i -c "echo \$A"
哇,我们终于得到了我们想要的结果。但是由于没有TTY,bash会增加一个错误。因此,除了交互方式,我们可以设置一个psuedo-TTY:
docker run -t my_image /bin/bash -i -c "echo \$A"
关于bash - 在分离模式下运行docker时设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34604079/