首页 新闻 搜索 专区 学院

centos中docker映射出来的端口被tcp6监听,而没有被tcp监听导致ip+端口无法进行访问

0
悬赏园豆:50 [待解决问题]

如图,我通过docker构建容器时,映射出来的端口是8081,但是通过ip+8081无法访问,在检查了一遍安全组规则是否开放,以及百度以后查到是由于端口被tcp6监听,没有被tcp监听到导致的。

按照如下教程对tcp6进行关闭,并重启httpd:
https://www.cnblogs.com/brady-wang/p/10495341.html
文中命令如下:
sysctl net.ipv6.conf.all.disable_ipv6=1
systemctl restart httpd

重新访问依然打不开。百度出来的其他方案也和上面这个类似,试过几个没有效果,不知道是不是步骤不对的原因。
由于服务器是新添置的,httpd是没有的,查了一下才知道需要安装Apache。(这里其实不太清楚为什么需要这么做,毕竟, 我只是构建一个容器,还要因为一个命令安装Apache么)

早些时候用docker没遇到过这个问题,都是映射出来直接就能访问了,于是打开了以前的一个服务器,上面也是通过docker部署了一个站点,容器都是运行的,只是和这个也一样无法再在浏览器访问了。通过netstat -nlpt查看,发现那边的也是tcp6。

服务器的镜像版本是:CentOS7.6 (安全组入方向已开放所需端口)
docker是通过命令一键安装的(Docker version 19.03.12):
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

enmmmm暂时没有补充了,希望遇到过的大佬指点一下。

问题补充:


又重新执行了一遍命令,最后显示的还是tcp6......我裂开了。


2020年10月13日11:18:37
之前部署.net core容器的服务器是正常的,webapi可以访问。上次没访问成功是我记错路径了。所以这个问题现在可以缩小范围了。当使用docker部署jenkins时,会存在端口被tcp6监听而无法访问的情况。具体原因后续还在跟进。
总结了一下几个点:
1.防火墙是关的。
2.服务器端口是开放的。
3.netstat -nlpt中显示端口被tcp6监听,无tcp监听。
4.不用docker部署,直接在服务器部署是可以的(另外一台服务器就是这么干的)

默卿的主页 默卿 | 大侠五级 | 园豆:5104
提问于:2020-09-10 15:48
< >
分享
所有回答(5)
0

容器中 Jenkins 监听的 IP 地址是什么?

dudu | 园豆:37175 (高人七级) | 2020-09-10 17:48

昨天安装Jenkins的那台服务器我初始化了,现在在重装中。
我在另外一台以前部署.net core项目的服务器上看容器里应用监听的ip时,是这样的:

前面也是tcp6。这个项目原本是部署的webapi,现在也是访问不了,很奇怪。

容器运行状态都是好的。

支持(0) 反对(0) 默卿 | 园豆:5104 (大侠五级) | 2020-09-11 10:13

@默卿: telnet localhost 80 能连上吗?

支持(0) 反对(0) dudu | 园豆:37175 (高人七级) | 2020-09-11 10:36

@dudu: 可以连上。

支持(0) 反对(0) 默卿 | 园豆:5104 (大侠五级) | 2020-09-11 11:20
0

我被这个问题难了半天了

乐乐2016 | 园豆:202 (菜鸟二级) | 2020-10-07 21:54

网络访问的问题解决了

docker run -itd --name my_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 mysql:5.7 这样的就有这个问题

docker run -itd --name my_mysql2 -p 3306:3306 --net=host -e MYSQL_ROOT_PASSWORD=111111 mysql:5.7

多加了一个 --net=host ,就可以外网访问了。

https://www.jianshu.com/p/22a7032bb7bd 这里可以看到参数的意义

支持(0) 反对(0) 乐乐2016 | 园豆:202 (菜鸟二级) | 2020-10-08 08:44

@乐乐2016: 加上--net=host以后命令里的-p 3306:3306这个端口映射就不需要了,容器会使用默认的端口并和主机端口一致。你的截图里协议依然是tcp6,用工具访问mysql是可以的,我另外一台服务器也部署了mysql容器,也是tcp6,可以连接,这个没有问题。
我的问题主要在于,如果构建的容器是个需要【网页打开访问】的应用,如jenkins或web网站,那么前面的http协议应该是tcp方式的,而不是tcp6的。你可以做个小测试,构建一个jenkins容器,当netstat -nlpt里看到jenkins容器是被tcp6监听到的,是否还可以在浏览器中访问到。

支持(0) 反对(0) 默卿 | 园豆:5104 (大侠五级) | 2020-10-09 14:14
0

解决了吗 我也遇到相同,太难搞了

东隅已逝桑榆非晚 | 园豆:202 (菜鸟二级) | 2020-11-27 20:59

没有,好长一段时间没有研究了,我有个jenkins直接部署在服务器上的,没用docker,那个是没问题的。可能是jenkins在docker中水土不服叭,这边建议安装jenkins先不使用docker,后面更多的人遇到的话可能也有教程分享叭,也可能有一部分人也遇到了,最后和我一样直接装服务器上了,这个只能算是避开了问题。暂时是没有别的方案了,当初找了好久就是不知道怎么解决那个问题。

支持(0) 反对(0) 默卿 | 园豆:5104 (大侠五级) | 2020-11-30 10:00
0
Wood_J | 园豆:202 (菜鸟二级) | 2021-06-25 11:08
0

可以看看是否服务商没有提供IPv6服务

云雾缭 | 园豆:202 (菜鸟二级) | 2021-10-20 12:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册