如图,我通过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部署,直接在服务器部署是可以的(另外一台服务器就是这么干的)
这两天又重试了一下,以前的阿里云服务器过期了,这次用的是天翼云,部署方式还是一样,docker里安装jenkins,这次倒是可以了,tcp和tcp6都是有的。可能是之前的服务器有问题吧,这次的天翼云用的是centos8,不纠结了。
容器中 Jenkins 监听的 IP 地址是什么?
昨天安装Jenkins的那台服务器我初始化了,现在在重装中。
我在另外一台以前部署.net core项目的服务器上看容器里应用监听的ip时,是这样的:
前面也是tcp6。这个项目原本是部署的webapi,现在也是访问不了,很奇怪。
容器运行状态都是好的。
@默卿: telnet localhost 80
能连上吗?
@dudu: 可以连上。
我被这个问题难了半天了
https://www.jianshu.com/p/22a7032bb7bd 这里可以看到参数的意义
@乐乐2016: 加上--net=host以后命令里的-p 3306:3306这个端口映射就不需要了,容器会使用默认的端口并和主机端口一致。你的截图里协议依然是tcp6,用工具访问mysql是可以的,我另外一台服务器也部署了mysql容器,也是tcp6,可以连接,这个没有问题。
我的问题主要在于,如果构建的容器是个需要【网页打开访问】的应用,如jenkins或web网站,那么前面的http协议应该是tcp方式的,而不是tcp6的。你可以做个小测试,构建一个jenkins容器,当netstat -nlpt里看到jenkins容器是被tcp6监听到的,是否还可以在浏览器中访问到。
解决了吗 我也遇到相同,太难搞了
没有,好长一段时间没有研究了,我有个jenkins直接部署在服务器上的,没用docker,那个是没问题的。可能是jenkins在docker中水土不服叭,这边建议安装jenkins先不使用docker,后面更多的人遇到的话可能也有教程分享叭,也可能有一部分人也遇到了,最后和我一样直接装服务器上了,这个只能算是避开了问题。暂时是没有别的方案了,当初找了好久就是不知道怎么解决那个问题。
可以看看是否服务商没有提供IPv6服务
花了一个小时,已经解决,尝试了上述方法都无法解决问题,最后想了想是不是阿里云管理的问题(我的云服务器是阿里云的),结果还真是,由于阿里云服务器设置了安全组,它的端口入方向默认不是全部开放的,所以要自己打开
参考:https://developer.aliyun.com/article/767328 后解决问题