Docker 映射端口telnet不通

本文介绍了解决Docker容器绑定端口无法从宿主机访问的问题,通过检查并开启内核转发参数net.ipv4.ip_forward,成功解决了端口不通的情况。

问题描述

我在自己虚拟机的docker上运行的容器绑定的端口突然跟我的电脑通不了了,在docker启动之后,我使用了netstat -ntalp | grep 3000 发现端口监听shi是正常的,然后就到本机电脑telnet过去发现不通,一开始怀疑是不是我重启过虚拟机导致防火墙又开启了(临时关闭),但是在虚拟机里面启动了个redis,本机确实能telent6379端口的,而且检查firewalld 和selinux发现都是处于关闭状态,说明出问题的只是docker的转发出了问题,那转发得先看转发的配置链是否正确,需要使用iptables -t nat -nL 命令来查看,看起来是对的,于是在想会不会是其他的有问题。

上网找了网友的资料发现,可能是转发得功能没有开,毕竟Linux转发要开启内核转发功能net.ipv4.ip_forward,于是我们可以先检查内核转发是否打开:
输入:sysctl net.ipv4.ip_forward发现

发现状态为0代表内核转发没有打开,估计问题就是这个鬼造成的,于是打开内核转发参数
是处于没有打开的状态,于是我们需要打开它:

[root@dev1 opt]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@dev1 opt]# sysctl -p
然后本机再次请求发现可以telnet通了。

为什么会出现这个问题,其实是因为docker 的proxy在1.7 版本之后全部都依赖于iptables了,所以docker转发的时候实际上是在iptables上创建了一个转发规则,然后根据这个转发规则来进行转发而iptables需要转发就必须要开启网卡转发功能,也就是net.ipv4.ip_forward要一直处于开启状态。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值