AWS上的Docker - 环境变量不从主机继承到容器

时间:2018-04-02 14:48:04

标签: bash amazon-web-services docker

我有一个脚本(托管在GitHub上)执行以下操作:

  • 在AWS上创建EC2实例
  • 将本地IP(私有IP地址)保存为环境变量$LOCALIP
  • 安装Docker(官方回购)
  • 更新基本实例(Ubuntu 16.04 LTS)
  • 拉出我的自定义图片
  • 运行-e LOCALIP尝试将主机环境变量传递给容器的图像(我也尝试过-e LOCALIP=$LOCALIP

但是当我docker exec进入该实例的容器并运行echo $LOCALIP时,它什么也没显示。正在运行env告诉我LOCALIP在那里,但没有任何反对意见

如果我销毁容器并使用原始脚本中的完全相同的行(使用-e LOCALIP=$LOCALIP重新制作)它可以工作 - 我需要这个过程自动化,但是非常感谢一些额外的帮助。

基本上sudo docker run -dit -e LOCALIP -p 1099:1099 -p 50000:50000 screamingjoypad/armada-server /bin/bash不共享主机LOCALIP变量。

更新

尝试下面的建议我在我的脚本中添加了以下行 source /etc/bash.bashrc但这仍然不起作用。在容器中尝试echo $LOCALIP时,我仍然空白......

enter image description here

2 个答案:

答案 0 :(得分:0)

问题在于你的shell脚本的这一行:

echo "export LOCALIP=$(hostname -i)" >> /etc/bash.bashrc

执行此命令后,export指令尚未生效。它将在您下次登录后生效。

要使LOCALIP环境变量立即生效,请在echo "export ...命令后添加此行:

source /etc/bash.bashrc

答案 1 :(得分:0)

我相信我已经解决了。我现在使用AWS元数据来获取私有IP地址,使用以下脚本添加:

sudo docker run -dit -e LOCALIP=$(curl http://169.254.169.254/latest/meta-data/local-ipv4) -p 1099:1099 -p 50000:50000 screamingjoypad/armada-server /bin/bash

相关问题