专栏首页发现Docker的IP地址

发现Docker的IP地址

使用Eclipse Che,我们使用Docker容器编写了很多实用程序。它们占用空间小,便于携带,可以在许多不同的操作系统上运行,而无需用户安装额外的软件。

我们的许多实用程序还需要创建和管理Docker容器,所以当我们的代码在Docker容器中运行时,我们需要与管理我们的Docker守护进程交互。这意味着我们将需要它的IP地址。

Docker有许多不同的版本 - boot2docker,Windows ,Mac的Docker,以及Linux的本地版本。

您可以使用测试该实用程序docker run --net=host codenvy/che-ip。这将下载Eclipse Che IP工具。它大小约为4.8 MB。

$ docker run  - net=host codenvy/che-ip
192.168.65.2

$ docker images 
REPOSITORY          TAG    IMAGE ID     CREATED     SIZE
codenvy/che-ip      latest a6bbac2f56dc 5 weeks ago 4.8 MB

这个dockerfile很简单-它增加了一个shell脚本并运行它作为命令的一部分。

FROM alpine:3.4
COPY getip.sh /bin/getip.sh
CMD ["/bin/getip.sh"]

被执行的脚本是一个简单的脚本。它首先确定docker绑定的网络接口,然后使用该网络接口来获取IP地址。鉴于特定的网络接口,Docker容器使用该ip实用程序来获取主机的IP地址(请注意,--net=host这使得我们可以使用主机的网络配置而不是容器):

ip a show "${NETWORK_IF}" | grep 'inet' | cut -d/ -f1 | awk '{print $2}'

Docker的不同实现将自己绑定到不同的网络接口。有些是可以预测的,有些则不是。所以,我们需要根据底层主机的配置来确定适当的网络接口。

如果安装是Docker for Windows或Docker for Mac,那么我们保证Docker正在运行eth0

if uname -r | grep -q 'moby'; then 
    if [ -d "/sys/class/net/eth0" ]; then 
    NETWORK_IF=eth0 
    fi
fi

否则,检查有点棘手。在这种情况下,Docker可以绑定到不同的以太网接口。我们知道Docker运行在非虚拟机管理程序虚拟机上,所以我们搜索/sys/class/net并遍历所有返回的值,找到绑定的第一个接口,eth这就是Docker网络接口。我们将使用它。

#如果NETWORK_IF尚未设置,则搜索它

if test -z ${NETWORK_IF}; then 
    for i in $(ls /sys/class/net); do
        if [ ${i:0:3} = eth ]; then 
            NETWORK_IF=${i} 
        fi 
    done
fi

否则,如果这两个函数都没有返回一个有效的网络接口,那么这是因为一些Linux distrubtions正在为它们的接口提供专门的名字,比如ensp0s3CentOS。在这种情况下,Docker通常绑定到docker0接口。

#如果NETWORK_IF仍未设置,则搜索docker0

if test -z ${NETWORK_IF}; then 
    if [ -d "/sys/class/net/docker0" ]; then 
        NETWORK_IF=docker0" 
    fi
fi

否则,如果这个测试仍然失败,那么就不可能确定当前的接口。对于我们搜索Docker IP的实用程序,当我们获得退出值时,1我们将与管理员进行交互以了解更多信息。

Florent Benoit为此工作做了很大的工作。Dockerfile和相关脚本的源代码在Che的GitHub仓库上

相关的参考资料:

Docker入门

本文的版权归 Hero 所有,如需转载请联系作者。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 发现Docker的IP地址

    我们用Eclipse Che编写了很多使用Docker容器的小程序。它们占用空间小,易移植,可以在许多不同的操作系统上运行,而无需用户安装额外的软件。

    Oraisdy
  • 发现Docker的IP地址

    我们使用Eclipse Che在Docker上编写了很多实用程序。它们占用空间小,便于携带,可以在许多不同的操作系统上运行,而无需用户安装额外的软件。

    人工智能资讯小编
  • IP地址中的保留地址

    根据用途和安全性级别的不同,IP地址还可以大致分为两类:公共地址和私有地址。公用地址在Internet中使用,可以在Internet中随意访问。私有地址只能在内...

    似水的流年
  • Centos7.5配置IP地址的实现

    cd /etc/sysconfig/network-scripts/,找到配置文件为ifcfg-em2

    砸漏
  • 在Linux中发现IP地址冲突的方法

    Linux 下出现 IP 冲突,是不会像 Windows 那样,在右下角弹出冲突提示的。博主就出过一次糗,记得当时是在 VM 虚拟机里面安装了 4 个 redh...

    张戈
  • 如何在Linux中发现IP地址冲突

    你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们。它们通过DHCP服务器分配并且会经常改变。现在有两种IP地址。动态的一种会经常改变(几天一次...

    小小科
  • 如何在Linux中发现IP地址冲突

    你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们。它们通过DHCP服务器分配并且会经常改变。现在有两种IP地址。动态的一种会经常改变(几天一次...

    小小科
  • 利用腾讯的ip地址库做ip地址定位

    腾讯的这个还是相对比较准确的。因为腾讯每个QQ用户发现自己匹配的地理位置信息不准确都可以提交更正的http://fw.qq.com/ipaddress 调用: ...

    张善友
  • Tor安全研究:发现客户端IP地址

    去年2月,我的“Tor洋葱路由服务”(Onion Service)遭受了一段时间的分布式拒绝服务攻击(DDoS),我花了好长时间对攻击进行了分析,并制订了缓解和...

    FB客服

扫码关注云+社区

领取腾讯云代金券