在分离模式下运行docker时设置环境variables

如果我在/root/.bashrc中包含以下行:

export $A = "AAA" 

那么当我以交互模式(docker run -i)运行Docker容器时,$ Avariables保持其值。 但是,如果我以分离模式运行容器,我不能访问该variables。 即使我运行明确的源代码.bashrc的容器

 docker run -d my_image /bin/bash -c "cd /root && source .bashrc && echo $A" 

这样的行产生一个空的输出。

那么,为什么会这样呢? 我怎样才能设置.bashrc文件中定义的环境variables?

任何帮助将非常感激!

第一个问题是你正在运行的命令有$A被主机shell(而不是容器shell)解释。 在你的主机上, $A可能是黑色的,所以你的有效命令变成:

 docker run -i my_image /bin/bash -c "cd /root && source .bashrc && echo " 

正如它所说的那样。 我们可以将variables转义出来,发送到容器并在那里正确评估:

 docker run -i my_image /bin/bash -c "echo \$A" 

但是这也将是空白的,因为虽然容器是,壳不是交互模式。 但我们可以强制它:

 docker run -i my_image /bin/bash -i -c "echo \$A" 

呜呼,我们终于得到了我们期望的结果。 但是由于bash中没有TTY,所以增加了一个错误。 所以,而不是交互模式,我们可以设置一个psuedo-TTY:

 docker run -t my_image /bin/bash -i -c "echo \$A"