本站提供Linux服务器运维,自动化脚本编写等服务,如有需要请联系博主微信:xiaozme
Docker安装完毕后默认是不支持IPV6方式监听和访问的,如果您的服务器支持IPV6,且有IPV6需求,可以通过下面的方法启用IPV6支持。
我的场景
先来说说我的场景,最近有个特殊需求,要求容器的某个端口只能通过IPV6访问,不支持IPV4访问。然而默认的情况却与之相反,现目前支持IPV4访问,但不支持IPV6访问。因此需要先将Docker启用IPV6支持并设置IPV6监听。
Docker启用IPV6
修改Docker配置文件/etc/docker/daemon.json
,如果没有就自己新建一个。然后复制下面的内容并保存:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
2001:db8:1::/64
是一个虚拟的IPV6网段,保持上面默认的复制下来即可。
然后输入命令:systemctl reload docker
重载一次Docker服务,这样Docker就支持IPV6的监听和访问了。
仅监听IPV6地址
如果要想实现上面的屏蔽IPV4访问,仅支持IPV6访问,还需要进一步操作。默认情况下我们可以通过-p
参数指定监听IP和映射端口,比如我们可以指定监听127.0.0.1:80
可以这样做:
docker run -itd --name="onenav" -p 127.0.0.1:80:80 \
-v /data/onenav:/data/wwwroot/default/data \
helloz/onenav:0.9.27
如果只需要支持IPV6监听和访问,那么在启动容器的时候我们需要在-p
参数后面使用[]
来指定IPV6的IP监听,比如:
docker run -itd --name="onenav" -p [2a12:a301:2::1126]:80:80 \
-v /data/onenav:/data/wwwroot/default/data \
helloz/onenav:0.9.27
- 如果指定IPV6地址监听,需要使用
[]
括起来 2a12:a301:2::1126
改成您自己的公网IPV6地址
如果需要同时支持IPV4和IPV6的监听和访问,那么只需要去掉-p
参数后面的IP地址,仅保留端口即可,比如:
docker run -itd --name="onenav" -p 80:80 \
-v /data/onenav:/data/wwwroot/default/data \
helloz/onenav:0.9.27
总结
- Docker默认没有启用IPV6支持,需要通过修改配置文件启用
- Docker启用IPV6支持后,默认会同时监听IPV4和IPV6
- 如果只需要IPV6地址访问,
-p
参数后面需要通过[ipv6地址]
来指定,IPV6地址需要使用[]
受教,原来还能只监听ipv6呀。家里没公网IP,目前是ddns到ipv6,然后用一个nginx容器监听ipv6端口,然后反向代理到部署的ipv4项目。