百度上大部分的答案都是关闭防火墙、或者就是在防火墙上添加策略,重启防火墙及iptables开放端口
如果有效上述方法有效就不用看下面的内容了
先说解决思路:
第一步:关闭docker,使用yum 安装Nginx,安装之后测试端口
telnet 127.0.0.1 80
我这边的测试结果是通的,这就有点意思了,证明本机是正常的,那么原因就是docker引起的
第二步:启动docker,在docker中启动Nginx,启动之后再次测试
telnet 127.0.0.1 80
发现端口不通,确定问题原因,是docker引起的,准备卸载docker ,重新安装,重装之后发现还有同样的问题
第三步:锁定在docker的网络上,我这边用的是docker-compose关联容器的配置文件的
科普一下:Docker中有两种网络模式:bridge和host。
bridge模式是Docker默认的网络模式,它会创建一个虚拟的网络桥接口,所有容器都会连接到这个网络上。每个容器都会被分配一个唯一的IP地址,并且可以通过容器名或IP地址进行通信。这种模式下,容器之间的通信是通过虚拟网络进行的,因此网络性能可能会受到一定影响。
host模式是指容器直接使用宿主机的网络,容器和宿主机共享同一个网络接口,容器中的应用程序可以直接使用宿主机的IP地址和端口,从而达到和宿主机一样的网络性能。这种模式下,容器之间的通信是通过宿主机的网络进行的,因此网络性能更好,但是容器之间的隔离性会变差。
因此,当需要容器之间进行通信时,建议使用bridge模式;当需要容器和宿主机之间进行通信或需要最大化网络性能时,可以考虑使用host模式。
既然bridge模式走不通,那我们就换条路走,走host,但是host不支持端口映射,比如Nginx默认端口是80,当前服务器的80端口被使用了就会导致异常,或者去Nginx配置文件修改端口(docker-compose配置文件需要修改,比如:posts这个配置需要注释)代码如下
version: '3'
services:
nginx:
image: nginx
container_name: nginx
restart: always
network_mode: "host"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
第四步:启动Nginx,再次使用telnet 测试端口是否正常,发现正常了,问题解决
以上就是排查过程。
还可以用最简单的办法,服务器重置,重新安装docker问题也能解决!!!