docker里镜像用ipv6无法访问_虚拟服务器端口设置

2022-09-27 15:34:20 浏览数 (1)

前言

我有一个朋友, 他在Dev 和 Test 服务器用Docker 搭建了Redis 供项目使用, 然后今天Test 环境的Redis 端口访问不通了, 在服务上可以正常连接, 真是离了个大齐, 让我们试试排查排查问题;

正文

端口检测 lsof

已确认在本地用 telnet ip 6381 访问不通, 那就上服务上看看端口情况

Dev

Test

Dev环境同时映射到Ipv6和Ipv4端口, Test环境仅映射到Ipv6, 那基本上就可以断定是环境问题了

容器状态 docker ps

既然端口映射有问题, 就先看下容器的状态 Dev

Test

可以看到Dev同时映射了Ipv6和Ipv4, Test只映射了Ipv4, 这就能解释上面的情况了, 他说他搭建命令是一样的, emmm那就是环境问题, 看看Docker版本

Docker版本 docker -v

果然Test 版本是 Docker version 1.13.1, Dev 版本是Docker version 20.10.8, 这就能讲通为何同样的搭建命令但映射的不同;

但这又产生了一个新问题, 之前是这样是可以访问的, Ipv6 是可以兼容访问Ipv4的, Ipv4不能访问ipv6; 会不会是Ipv4的转发出了问题!

数据包转发 net.ipv4.ip_forward

当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能;

执行 /sbin/sysctl net.ipv4.ip_forward 查看:

代码语言:javascript复制
net.ipv4.ip_forward = 0

果然没开, 那就把这个转发打开

临时修改 net.ipv4.ip_forward

可以用 sysctl -w net.ipv4.ip_forward=1 或者 echo 1 > /proc/sys/net/ipv4/ip_forward

重启Redis 容器 docker restart redis, 可以访问通了! 那就把这个配置永久生效

永久修改 net.ipv4.ip_forward

vim 修改文件/etc/sysctl.conf:

代码语言:javascript复制
net.ipv4.ip_forward = 1

保存后调用 sysctl -p 生效, ok问题解决;

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183735.html原文链接:https://javaforall.cn

0 人点赞