发现Docker的IP地址

我们使用Eclipse Che在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存储库上

本文的版权归 人工智能资讯小编 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和PYTHON有个约会

python-应用层-网络编程-FTP

前面描述的基于TCP/UDP协议的网络程序开发,主要是针对传输层协议的底层代码实现 在实际操作过程中,更多的情况是直接操作应用层的数据协议的网络程序开发,如文...

933
来自专栏康怀帅的专栏

SSH 隧道与转发内网穿透(转载)

大家都知道 SSH 是一种安全的传输协议,用在连接服务器上比较多。不过其实除了这个功能,它的隧道转发功能更是吸引人。下面是个人根据自己的需求以及在网上查找的资料...

3995
来自专栏散尽浮华

分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控

Zabbix3.0 Server以后就自带了MySQL插件来监控mysql数据库的模板,只需要配置好agent客户端,然后在web端给主机增加模板就行了。 以...

1849
来自专栏BestSDK

基于Docker的PHP开发环境

【编者的话】本文作者是Geoffrey,他是一个PHP的Web开发者,喜欢DevOps和Docker。本文主要介绍了如何使用Docker构建PHP的开发环境,文...

2369
来自专栏重庆的技术分享区

各种邮箱pop,SMTP设置

1.5K3
来自专栏云计算教程系列

Ubuntu上如何使用GitLab CI搭建持续集成Pipeline

GitLab Community Edition是一个自托管的Git存储库提供程序,具有帮助项目管理和软件开发的附加功能。GitLab提供的最有价值的功能之一是...

1763

发现Docker的IP地址

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

1945
来自专栏Laoqi's Linux运维专列

phpMyadmin 服务简单安全加固

1222
来自专栏程序员的SOD蜜

docker 学习资料收集

docker镜像怎么迁移到其他的服务器 http://www.talkwithtrend.com/Question/123589

642
来自专栏编程坑太多

『高级篇』docker之gitlab和jenkins-CICD流程(43)

PS:最后总结下,建议jenkins不要使用容器安装,我用容器安装入了至少十几个坑,对了解命令还是有好处的。我总结几点

152

扫码关注云+社区