No route to host两个docker容器的服务访问不通的解决

 更新时间:2025年02月21日 10:44:04   作者:十九岁少年想长肌肉  
在CentOS服务器上使用Docker容器时,当容器之间的服务调用出现“Failed to establish a new connection: [Errno 113] No route to host”错误,是因为容器的报文源地址被防火墙拦截,解决方法有两种:在防火墙上开放指定端口或关闭防火墙

问题描述

如图,我的两个docker服务service1service2位于同一台服务器上,当service1调用service2时,报错:

Failed to establish a new connection: [Errno 113] No route to host'

原因分析

  • 我是在centos服务器上创建的docker容器,其网络模式采用的是bridger模式。
  • 启动docker时,docker进程会创建一个名为docker0的虚拟网桥,用于宿主机与容器之间的通信。当启动一个docker容器时,docker容器将会附加到虚拟网桥上,容器内的报文通过docker0向外转发。
  • 如果docker容器访问宿主机,那么docker0网桥将报文直接转发到本机,报文的源地址是docker0网段的地址。
  • 而如果docker容器访问宿主机以外的机器,docker的SNAT网桥会将报文的源地址转换为宿主机的地址,通过宿主机的网卡向外发送。
  • 因此,当docker容器访问宿主机时,宿主机服务端口会被防火墙拦截,从而无法连通宿主机,出现No route to host的错误。
  • 而访问宿主机所在局域网内的其他机器,由于报文的源地址是宿主机ip,因此不会被目的机器防火墙拦截,所以可以访问。

解决办法

解决办法有两种:

  1. 在防火墙上开放指定端口(推荐),本文中的示例端口号为8033
firewall-cmd --zone=public --add-port=8033/tcp --permanent
firewall-cmd --reload
  1. 关闭防火墙
systemctl stop firewalld

总结

  • 我在服务器A上部署的服务调用其他服务器上的服务,比如服务器B的service3服务,是没有问题的,报文的源地址会转换为宿主机的地址;
  • 但是如果我访问宿主机的服务,即服务器A上其他容器的服务,报文的源地址是docker0网段的地址,宿主机服务端口会被防火墙拦截,从而出现No route to host的错误,需要在防火墙上开放指定端口来解决。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker给容器添加新端口映射两种方法及常用命令

    Docker给容器添加新端口映射两种方法及常用命令

    在使用Docker时容器的端口映射是一个核心概念,它允许容器与宿主机以及外部网络进行通信,这篇文章主要给大家介绍了关于Docker给容器添加新端口映射两种方法及常用命令的相关资料,需要的朋友可以参考下
    2024-07-07
  • Docker 镜像、容器、仓库的概念及应用详解

    Docker 镜像、容器、仓库的概念及应用详解

    这篇文章主要介绍了Docker 镜像、容器、仓库的概念及应用详解的相关资料,需要的朋友可以参考下
    2016-12-12
  • 在Docker中更快地构建Maven项目

    在Docker中更快地构建Maven项目

    本文主要介绍了在Docker中更快地构建Maven项目,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 使用docker部署influxdb与 mongo的常用命令

    使用docker部署influxdb与 mongo的常用命令

    这篇文章主要介绍了使用docker部署influxdb与 mongo的常用命令,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Docker部署Mysql,.Net6,Sqlserver等容器

    Docker部署Mysql,.Net6,Sqlserver等容器

    这篇文章介绍了Docker部署Mysql,.Net6,Sqlserver等容器的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • 阿里云ECS(CentOS镜像)安装docker的实现步骤

    阿里云ECS(CentOS镜像)安装docker的实现步骤

    本文主要介绍了阿里云ECS(CentOS镜像)安装docker的实现步骤,从准备工作到实际安装步骤,详细解析每一步操作,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 谈谈我对docker的理解

    谈谈我对docker的理解

    作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。这篇文章给大家介绍了docker的优势及docker的三个基本概念,感兴趣的朋友一起看看吧
    2016-10-10
  • docker之如何设置日志文件大小及个数

    docker之如何设置日志文件大小及个数

    这篇文章主要介绍了docker之如何设置日志文件大小及个数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Docker容器间通信与外网通信的操作

    Docker容器间通信与外网通信的操作

    这篇文章主要介绍了Docker容器间通信与外网通信的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • docker可视化管理工具portainer忘记密码重置教程的实现

    docker可视化管理工具portainer忘记密码重置教程的实现

    本文主要介绍了docker可视化管理工具portainer忘记密码重置教程的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论