容器内获取主机ip(docker查看容器ip地址)
时间:2023-10-27 21:22:57 浏览量:48
Docker 默认是不开启 IPv6 支持的,但是我们某些业务往往又需要 IPv6 的支持,特别是 IPv6 普及大势所趋,本文主要介绍的是如何开启 Docker 桥接网络 IPv6 支持,这篇文章具体操作仅供参考,建议以官方文档为准。
本文最重要的先决条件是主机商已经分配给你一个公网 IPv6 地址段,我们可以通过查看主机控制面板中信息、询问主机供应商或者直接SSH登录主机使用命令 ip -f inet6 addr show eth0 获取。命令方式获取的 ipv6 地址输出如下:
其中 inet6 2607:f0d0:1002:51::4/64 scope global 这行指示的IPv6地址是我们需要的目标地址,注意我们这里选取的是公网IP,也就是后面 scope global 指示的,大家注意到后续还有一个fe80 开头的 IPv6 地址,这个后面没有 global,也就是通常意义内网 IPv6,本文不使用,当然读者可以根据实际需要选择内网 IPv6 继续参照下面介绍的步骤完成操作。
Docker 可以配置多个虚拟网络,对于 IPv4 来说通过形如
172.17.0.1/16
、
172.18.0.1/16
、
172.19.0.1/16
这样内网私有IP地址段配置多个 IPv4 虚拟网段,那么同样的道理 IPv6 也建议划分多个段,如果手动划分不便,可以通过 IPv6 Subnetting Calculator自动划分,如下图所示:
比如刚才的 IPv6 地址划分为 4 个网段如下:
编辑 Docker 配置文件 /etc/docker/daemon.json ,如果该文件不存在,请手动建立。配置文件内容如下,如果你已有的配置文件缺少相应的配置项,添加上即可,没有必要完全覆盖内容。
这里 ip6tables 是指由 Docker 自动配置 IPv6 的防火墙规则,如果你希望自己手动配置,请改为 false 或者移除此项,否则容器将无法连接 IPv6 网络; fixed-cidr-v6 则是我们划分的子网段的第一个,这里仅作示例请读者根据实际情况修改。
完成配置后请使用 systemctl restart docker 重启docker服务生效。完成此步后 Docker 算是完成对于 IPv6 的支持了。
这个主要是我编排容器时用的比较多,这里也记录一下作为一个备忘吧。
Docker Compose 的配置文件内容关于 IPv6 部分重点是网络节配置,如果另外配置网络的话,必须选择与默认 daemon.json 不同的 IPv6 子网段,例如:
这里 example 网络我们通过配置开启IPv6支持,其中网络段配置IPv4是 172.23.0.0/16 ,IPv6选用余下的第二个网段 2607:f0d0:1002:51:4000::/66 注意这里 不能 和 daemon.json 配置的 IPv6 网段一样。这里的 IP 配置同样是一个示例,读者请根据实际情况进行修改。