让 Docker 同时支持 IPv4 和 IPv6 访问
最近在 uptime-kuma 上想添加一个仅 IPv6 主机的监控,但是发现添加了监控后无法 ping 通,但是从 uptime-kuma 所在的主机上是可以 ping 通 IPv6 的主机的。于是查了一下,发现不仅是主机需要支持 IPv6,docker 还需要开启 IPv6 功能才可以让 docker 支持 IPv6。
首先确认你的主机支持 IPv4 和 IPv6,然后有两种办法可以让 docker 支持 IPv6
- 让 docker0 的网络支持 IPv6,这样 docker 就全局支持 IPv6 了
- 编辑 Docker 守护进程配置文件,这个文件默认是没有的,如果没有就创建一个
sudo nano /etc/docker/daemon.json
- 在文件里添加以下内容,[2001:db8:1::/64] 是一个特殊的IPv6地址段,主要用于文档和示例目的。最好把这段 subnet 换成主机自己的 subnet,不过实测就用这个特殊地址段也是可以的。
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64",
"experimental": true,
"ip6tables": true
}
- 重启 Docker 服务
sudo systemctl restart docker
- 这样所有创建的 docker 就都支持 IPv6 了
- 或者可以创建一个含有 IPv6 网络的 docker 网络,这样所有在这个网络上创建的 docker 就支持 IPv6
- 创建支持双栈的 docker 网络
# subnet 不能是已经被占用的,如果被占用了需要换一段
sudo docker network create --ipv6 --subnet=172.20.0.0/24 --subnet=2001:db8:2::/64 dualnetwork
- 在上面创建的双栈网络上部署 docker
# 以部署 uptime-kuma 为例,添加参数 --network dualnetwork 让 docker 部署在 dualnetwork 网络上
sudo docker run -d --restart=always --network dualnetwork -p 3001:3001 -v ./kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
总结,以上两种方法都很简单易用,具体用哪种方法要看 docker 的部署要求和环境需要。