记录技术收获,分享个人心得

人生如负重远行,不可急于求成

Docker不监听IPv4端口的解决方案

目前IPv6越来越普及了,服务器内配置应用经常遇到一些ipv6的问题,最近我在服务器配置docker的nginx时候出现了ipv4端口不监听的状态,报错是WARNING: IPv4 forwarding is disabled. Networking will not work.,经过查找资料解决了这个问题。

1、问题现象:

(1)在服务器启动镜像容器

nahsoagoac@ebs-63574:~$ sudo docker run -d --name web -p 80:80 nginx:v1 

《Docker不监听IPv4端口的解决方案》

完成后发现出现了一段报错(WARNING: IPv4 forwarding is disabled. Networking will not work.),

(2)netstat -nptl发现只监听了tcp6的80,也就是IPv6端口

《Docker不监听IPv4端口的解决方案》

(3)从外部tcping或者telnet 80均不通

《Docker不监听IPv4端口的解决方案》

2、问题解决:

核心关键:net.ipv4.ip_forward

该值需要设置为1,也就是允许ipv4路由转发,如果不设置就会导致docker的80端口无法请求,其他端口也是类似的情况。

回忆我近期对服务器做的操作,原来是之前在编写linux的安全加固shell脚本时候net.ipv4.ip_forward设置为0了,所以就出现这个问题了。

(1)

root@ebs-63574:~# sysctl net.ipv4.ip_forward

如果返回0,则代表关闭了ip路由转发

《Docker不监听IPv4端口的解决方案》

(2)

root@ebs-63574:~# vi /etc/sysctl.conf

修改net.ipv4.ip_forward=1 ,如果没有该值则单独添加一行,保存

《Docker不监听IPv4端口的解决方案》

(3)

root@ebs-63574:~# sysctl -p

 使配置生效,正常应该返回一行包含net.ipv4.ip_forward=1

《Docker不监听IPv4端口的解决方案》

上述修改后测试无需重启docker直接就生效了,不行的话也可尝试重启下docker容器再试试。

《Docker不监听IPv4端口的解决方案》

错觉:

此时输入netstat -nptl发现docker还是只监听了tcp6,之前认为是没有设置成功,所以耽搁了很久调整,比如尝试这样运行容器

nahsoagoac@ebs-63574:~$ sudo docker run -d –name web -p 0.0.0.0:80:80 nginx:v1 

发现没有用,依然不会监听tcp4的80端口,这种情况时机上无需担心,可输入docker ps -a查看下端口映射

《Docker不监听IPv4端口的解决方案》

这个链接可能对理解这个端口转发有帮助:https://github.com/docker/docker/issues/2174


点赞
  1. 头像 vector4wang说道:

    老哥牛逼,一下自己就解决了同样的问题

发表评论

邮箱地址不会被公开。 必填项已用*标注

hi~

你好,欢迎来到我的博客,欢迎留言。

快速搜索:





Generic selectors

Exact matches only


Search in title


Search in content



Search in posts


Search in pages

欢迎关注我:

微博
steam
网易云音乐
QQ
500px

常用命令:

http://www.gaoshan.me/cmd