扫码阅读
手机扫码阅读

解决Docker端口映射无法访问问题

110 2024-01-25

昨天收到腾讯云提醒,服务器要到期了,由于之前是使用学生机 1 元 1 个月的机器,资格到期了也就无法续费了,所以又重新购买了一台机器

使用腾讯云快照创建了自定义镜像更换了服务器,一顿操作猛如虎,博客站点和其他服务都是正常的,只有一个docker的服务端口不能访问,研究了半天,最终找到了解决方案

于是乎本文记录一下解决方案,以及尝试过的方法

问题的现象是:

  1. 在宿主机 curl 对应的端口,处于阻塞状态,无响应
curl 127.0.0.1:8080 
  1. 在镜像内 curl 原端口正常,curl 百度失败
curl 127.0.0.1:80
curl www.baidu.com 

这里也得到了一个信息是不能访问外网,以为是服务问题,又创建了一个新的测试容器结果还是一样

使用docker port查看输出是正常的

$ docker port a7dafeccf24e
3012/tcp -> 0.0.0.0:3012
80/tcp -> 0.0.0.0:8080 

docker inspect也是正常的

重启docker服务也试过了

systemctl restart docker 

首先想到的是防火墙,直接进行关闭

systemctl stop firewalld 

关闭了也是不行的,安全组是复用以前的机器,应该是没有问题的

在和 笛声大佬 [1] 的交流下继续尝试

nmap 127.0.0.1 -p 8080
iptables -t nat -nvL 

结果都是正常的,没看出来有什么问题,然后让我尝试了查看ip_forward

cat /proc/sys/net/ipv4/ip_forward 

结果居然是 0,IP 转发需要进行开启,执行以下命令

echo 1 > /proc/sys/net/ipv4/ip_forward 

重启docker服务之后还是不能访问,无解了

大佬让提交工单问一下镜像后 docker 是不是得重装才能正常使用,结果我提交了一个工单,腾讯云的回复过于沙雕

非常抱歉,我们属于云平台技术支持人员,云平台产品及解决方案的支持是我们的技术专项,您提出的问题为第三方技术支持需求,我们无法帮您解决,还请您谅解;
为了解决您的需求,您可以考虑使用腾讯云的云市场解决您的问题,点击右上角服务中心—联系客服,在线咨询。 

此时内心一万个 mmp,算了,直接重装下docker试试吧

yum -y remove docker.x86_64 docker-client.x86_64 docker-common.x86_64
sh get-docker.sh --mirror AzureChinaCloud 

重新构建镜像和容器,结果还是不可以,打算放弃了突然翻到了一篇知乎文章 阿里云 ECS 的 Docker 为什么无法端口映射? [2] 中的这个回答

阿里云的内网eth0 网段正好跟Docker 的虚拟网卡都是 172 网段,有冲突. 

wtf?突然想到我的机器好像确实是一样的,跑去查看一下

得,确实是一样的,新开的机器是上海三区的,和之前的机器不是一个区域

修改/etc/docker/daemon.json,加入一行"bip": "192.168.1.5/24",,然后再次查看ifconfig,已经变成了192网段了

重启docker服务,curl 尝试正常,完美解决问题,喜大普奔

参考资料

[1]

笛声大佬: https://hqidi.com/

[2]

阿里云 ECS 的 Docker 为什么无法端口映射?: https://www.zhihu.com/question/278340552/answer/399564710

原文链接: https://mp.weixin.qq.com/s?__biz=MzAwOTgzNjY4MA==&mid=2247483793&idx=1&sn=a329065f439b0fe9f3036850b7b12195