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

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

Test

Dev环境同时映射到Ipv6和Ipv4端口, Test环境仅映射到Ipv6, 那基本上就可以断定是环境问题了
既然端口映射有问题, 就先看下容器的状态
Dev

Test

可以看到Dev同时映射了Ipv6和Ipv4, Test只映射了Ipv4, 这就能解释上面的情况了, 他说他搭建命令是一样的, emmm那就是环境问题, 看看Docker版本
果然Test 版本是 Docker version 1.13.1, Dev 版本是Docker version 20.10.8, 这就能讲通为何同样的搭建命令但映射的不同;
但这又产生了一个新问题, 之前是这样是可以访问的, Ipv6 是可以兼容访问Ipv4的, Ipv4不能访问ipv6; 会不会是Ipv4的转发出了问题!
当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能;
执行 /sbin/sysctl net.ipv4.ip_forward 查看:
net.ipv4.ip_forward = 0果然没开, 那就把这个转发打开
可以用 sysctl -w net.ipv4.ip_forward=1
或者 echo 1 > /proc/sys/net/ipv4/ip_forward
重启Redis 容器 docker restart redis, 可以访问通了!
那就把这个配置永久生效
用vim 修改文件/etc/sysctl.conf:
net.ipv4.ip_forward = 1保存后调用 sysctl -p 生效, ok问题解决;
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183735.html原文链接:https://javaforall.cn