如果安装的是 Windows 的 Docker 或 Mac 的 Docker, 那么我们要保证 Docker 在 eth0 上运行.
- 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 的网络接口. 我们将要使用到的.
- # 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 接口
- # 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 https://github.com/benoitf ,Florent Benoit 开发的这个实用程序. Dockerfile 的相关脚本和源代码在 Che 的 GitHub 库上 Che's GitHub repository https://github.com/eclipse/che-dockerfiles .
来源: https://www.oschina.net/translate/discovering-dockers-ip-address