在Docker容器内部获取主机详细信息是否可行?

3

是否可以从Docker内部获取主机信息,例如

  1. 主机的IP地址(eth0的IP而不是docker0的IP)
  2. 主机上可用的RAM

等等。

提前感谢您。

1个回答

4
无法实现一般情况下 - 这会破坏Docker提供的隔离性。
在本文中,您可以了解到从Docker容器中任何突破实际上都是严重的安全问题。

https://blog.docker.com/2014/06/docker-container-breakout-proof-of-concept-exploit/

然而,有各种解决方法:

http://blog.michaelhamrah.com/2014/06/accessing-the-docker-host-server-within-a-container/

建议采用以下方法:

"虽然无法内省主机的IP地址(据我所知),但可以通过环境变量传递该地址:"

docker@boot2docker:~$  docker run -i -t -e DOCKER_HOST=192.168.59.103 ubuntu /bin/bash
root@07561b0607f4:/# env
HOSTNAME=07561b0607f4
DOCKER_HOST=192.168.59.103
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/

在EC2上,您可以访问实例的元数据:
请参见 从Docker容器内部获取AWS实例元数据? 特别是:
$ curl http://169.254.169.254/latest/meta-data/hostname
ec2-203-0-113-25.compute-1.amazonaws.com

其他元数据选项在此处列出:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html


谢谢,Donald 我目前在EC2上使用相同的方法。 docker run -it -p 9200:9200 -p 9300:9300 -e HOST_IP=$(hostname --ip-address) shan/elk:latest 我的用例是,在docker内运行elasticsearch,并且需要将主机的IP传递给elasticsearch中的network.publish_host:参数。 如果不传递HOST_IP,则自动发现无法正常工作。 非常感谢,Donald。 - Shan
很抱歉,您必须将其传递进去-否则无法打破容器。 - Donald_W
必须接受这一点,因为安全性更重要。 - Shan
1
Donald的回答通常是正确的,但在EC2上,您可以查询实例元数据以获取IP地址。 - Nathaniel Waisbrot
感谢@Donald_W和@NathanielWaisbrot的帮助,现在一切正常。我能够使用curl http://169.254.169.254/latest/meta-data/local-ipv4获取实例IP。 - Shan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接