【发布时间】:2017-11-19 18:11:45
【问题描述】:
如何从 Docker 容器中检测到我在 AWS 环境中运行?我希望同一个容器在启动时可以选择执行一些 AWS 命令 IF 从 AWS 内部运行,但如果在本地环境中运行则跳过这些命令。
目前,我认为最简单的方法是在 AWS 中运行时设置一个环境变量。
还有其他方法吗?
【问题讨论】:
标签: amazon-web-services docker amazon-ec2 containers
如何从 Docker 容器中检测到我在 AWS 环境中运行?我希望同一个容器在启动时可以选择执行一些 AWS 命令 IF 从 AWS 内部运行,但如果在本地环境中运行则跳过这些命令。
目前,我认为最简单的方法是在 AWS 中运行时设置一个环境变量。
还有其他方法吗?
【问题讨论】:
标签: amazon-web-services docker amazon-ec2 containers
如果你的 Docker 容器缺少 curl 或 wget,你可以在 Bash 中使用这个技巧:
if ( exec 2>/dev/null ; echo > /dev/tcp/169.254.169.254/80 ) ; then
echo "AWS"
fi
【讨论】:
例如:
curl -i http://169.254.169.254/ | grep "200 OK"
文档:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify_ec2_instances.html
【讨论】:
检查您是否在 AWS 上运行的粗略方法。在 AWS 上运行的所有实例都可以使用 IP:169.254.169.254 访问内部元数据服务器。如果您可以连接到它,那么您就在 AWS 上。否则你不是。
$ curl -s --connect-timeout 2 169.254.169.254 > /dev/null
$ echo $?
0
在非 AWS 机器上:
$ curl -s --connect-timeout 2 169.254.169.254 > /dev/null
$ echo $?
28
【讨论】: