Docker No Route to Host问题解决

百度上大部分的答案都是关闭防火墙、或者就是在防火墙上添加策略,重启防火墙及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模式。


docker-compose

既然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问题也能解决!!!

转载标明出处,感谢支持!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容