设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

发现Docker的IP地址

2016-10-25 21:49| 发布者: joejoe0332| 查看: 1579| 评论: 0|原作者: oschina|来自: oschina

摘要: 使用Eclipse Che,我们用Docker容器编写了很多实用程序。 它们占用空间且轻便,可以在许多不同的操作系统上运行,而无需用户安装附加软件。我们的许多实用程序还需要创建和管理Docker容器,所以当我们的代码在Docker ...

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

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

Docker有许多不同的风格——boot2docker,Docker for Windows / Mac和native for Linux。

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

1
2
$ docker run — net=host codenvy/che-ip
192.168.65.2
1
2
3
$ docker images
REPOSITORY          TAG    IMAGE ID     CREATED     SIZE
codenvy/che-ip      latest a6bbac2f56dc 5 weeks ago 4


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

1
2
3
FROM alpine:3.4 
COPY getip.sh /bin/getip.sh 
CMD [“/bin/getip.s


执行的脚本是一个简单的脚本。 它首先确定docker绑定的网络接口,然后使用该网络接口获取IP地址。 给定一个特定的网络接口,docker容器使用ip实用程序获取主机的IP地址(注意—net = host是 允许我们使用主机的网络配置,而不是容器的网络地址):

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

Docker的不同实现将自己绑定到不同的网络接口。 一些是可预测的,而另一些不是。 因此,我们需要根据底层的主机配置来确定使用的适当的网络接口。


如果安装的是Windows的Docker或Mac的Docker,那么我们要保证Docker在eth0上运行。

1
2
3
4
5
if uname -r | grep -q ‘moby’; then 
  if [ -d “/sys/class/net/eth0” ]; then 
    NETWORK_IF=eth0 
  fi
fi

否则,检查会有点棘手。在这种情况下,Docker可以绑定到不同的Ethernet接口。我们知道Docker在非系统管理的VM中运行,因此我们在/ sys / class / net目录下查询,然后遍历所有返回的值,找到绑定在eth的第一个接口,然后这是Docker的网络接口。我们将要使用到的。

1
2
3
4
5
6
7
8
# 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接口

1
2
3
4
5
6
# 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的退出值,这个时候我们需要跟管理员交流,了解更多的信息。

Great work by Florent Benoit,Florent Benoit开发的这个实用程序。 Dockerfile的相关脚本和源代码在Che的GitHub库上Che’s GitHub repository


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部