前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >发现Docker的IP地址

发现Docker的IP地址

作者头像
Oraisdy
发布2018-01-08 17:26:24
2.5K0
发布2018-01-08 17:26:24

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

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

Docker有许多不同的版本 - boot2docker,Docker for Windows / Mac

,以及Linux的原生版本。

可以使用docker run --net=host codenvy/che-ip运行程序

。这将下载Eclipse Che IP工具。它大小约为4.8 MB。

代码语言:javascript
复制
$ docker run — net=host codenvy/che-ip
代码语言:javascript
复制
192.168.65.2

代码语言:javascript
复制
$ docker images
代码语言:dockerfile
复制
REPOSITORY          TAG    IMAGE ID     CREATED     SIZE
codenvy/che-ip      latest a6bbac2f56dc 5 weeks ago 4.8 MB

Dockerfile很简单 - 它添加一个shell脚本,并将其作为命令的一部分运行。

代码语言:javascript
复制
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

代码语言:bash
复制
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网络接口。

代码语言:javascript
复制
# If the NETWORK_IF has not been set, then search for it
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 发行版本为它们的接口提供专门的名字,比如CentOS使用的是ensp0s3。在这种情况下,Docker通常绑定到docker0接口。

代码语言:bash
复制
# If the NETWORK_IF still not set, then search for 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入门

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档