【问题标题】:Is it possible to get host details from within docker container?是否可以从 docker 容器中获取主机详细信息?
【发布时间】:2015-07-05 02:13:24
【问题描述】:

是否可以从 docker 中获取主机信息,例如

  1. HOST 机器的 IP(eth0 的 IP 不是 docker0 的)
  2. 主机中的可用 RAM

等等,

提前致谢

【问题讨论】:

    标签: docker


    【解决方案1】:

    这通常是不可能的——它会破坏 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 地址 (AFAIK),但你可以通过环境变量传递它:”

    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 上,您可以访问实例的元数据:

    Fetching AWS instance metadata from within Docker container?

    特别是:

    $ 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。
    • 恐怕你得把它传进去——否则就不可能从容器里跳出来。
    • 不得不忍受,因为安全更重要
    • Donald 的回答总体上是对的,但在 EC2 上,您可以查询实例元数据以获取 IP 地址。
    • 谢谢你们@Donald_W 和@NathanielWaisbrot,它工作正常。我可以使用 curl http://169.254.169.254/latest/meta-data/local-ipv4 获取实例 IP。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    相关资源
    最近更新 更多