两个docker容器互连时,提示no route to host错误的问题

大家都知道,两个docker container互连的时候可以用link,但是,我们也知道,container可以将自己的端口映射到宿主机上,比如一个container A上的tomcat将端口暴露给宿主机(0.0.0.0:58080->8080),另一个container B上的mysql将端口也暴露给宿主机(0.0.0.0:53306->3306),那么问题来了,是否可以将A上的jdbc连接改成jdbc:mysql://192.168.1.10:53306xxxxxx(假设192.168.1.10是宿主机的ip),猛然一看似乎可以,没有防火墙,端口又做了映射,应该是可以连通的,但实际上,在tomcat上,我遇到了no route to host的error,具体实验如下:

首先我们启动一个mysql的容器,将3306这个端口暴露给宿主机:

1 [[email protected] ~]# docker run -d -p 53306:3306 -e MYSQL_ROOT_PASSWORD=123456 test01/mariadb
2 2c564a3484a4424b18e413fb11c6a71d76098f7e2e30b3ea8ad4e1b987e249a8
3 [[email protected] ~]# docker ps
4 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
5 2c564a3484a4        test01/mariadb      "docker-entrypoint.sh"   45 seconds ago      Up 43 seconds       0.0.0.0:53306->3306/tcp   berserk_cray
6 [[email protected] ~]# 

这个时候我们用客户端来访问一下,测试53306这个端口是否能连接到我们的数据库:

连接成功了,说明端口映射是成功的,从外部访问宿主机的53306端口能正常的映射到容器上的3306端口。

好的,接下来,再启动一个tomcat的容器,将应用的jdbc连接指向宿主机的53306端口,来看看是否可以连通呢。

1 [[email protected] ~]# docker run -it -p 52080:8080 test01/wbserv /bin/bash
2 [[email protected] /]# sh /opt/apache-tomcat-7.0.70/bin/startup.sh
3 Using CATALINA_BASE:   /opt/apache-tomcat-7.0.70
4 Using CATALINA_HOME:   /opt/apache-tomcat-7.0.70
5 Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.70/temp
6 Using JRE_HOME:        /usr/java/jdk1.7.0_79/jre
7 Using CLASSPATH:       /opt/apache-tomcat-7.0.70/bin/bootstrap.jar:/opt/apache-tomcat-7.0.70/bin/tomcat-juli.jar
8 Tomcat started.
9 [[email protected] /]#

这个时候tomcat也起来了,接下来是配置应用和开启应用:(注意IP和端口号,都用宿主机的ip和端口)

好了,接下来,启动应用,可以发现应用起不来,然后查看下启动日志:

[[email protected] /]# tail -n 100 logs/catalina.out

提示开头说的这个错误,No route to host。

这个问题,估计可以通过修改hosts文件来解决,但是我没有这有这样做,有想去的朋友可以去尝试,最后考虑到日后会有大规模部署的需要,此处改成link连接,如:

--link mysql_name:tomysql

只需要将原来的jdbc连接改为

jdbc:mysql://tomysql:3306/drools?characterEncoding=utf-8

重启应用,问题解决。

时间: 2024-10-21 02:22:09

两个docker容器互连时,提示no route to host错误的问题的相关文章

基于icehouse使用bosh部署micro bosh时提示 No route to host

[问题现象]执行 bosh micro deploy ~/bosh-workspace/stemcells/bosh-stemcell-2624-openstack-kvm-centos.tgz提示如下错误 I, [2014-09-04T16:45:46.941403 #12969] [0xaa0000] INFO – : No existing deployments found (will save to /home/inchin/bosh-workspace/deployments/bos

利用Openvswitch实现不同物理机中的Docker容器互连

1. 测试环境 75机(10.11.150.75):Red Hat Enterprise Linux Server 7.0,无外网访问权限,已安装Docker Server 74机(10.11.150.74):Red Hat Enterprise Linux Server 7.0,无外网访问权限,已安装Docker Server 73机(10.11.150.73):Red Hat Enterprise Linux Server 7.0,无外网访问权限,已安装Docker Server 183机:

docker容器互连

三种方式 1.使用容器连接的示例如下: $ docker run --name some-app --link itbilu-mysql:mysql -d application-that-uses-mysql 注意:以上示例中的application-that-uses-镜像并不存在,仅为操作演示,下同. 除了进行容器连接的方式在其它容器中访问MySQL服务器容器外,还可以通过以下两种方式访问MySQL数据库服务器容器: 2.在创建MySQL服务器容器实例时通过-p或-P参数将数据库服务器端口

Visual Studio 2010 进行Winform打包时提示 不可恢复的生成错误 解决方案

参考:http://blog.csdn.net/xingqingxiang/article/details/7198076 在进行Visual Studio 2010 进行Winform打包时,提示 不可恢复的生成错误,很是郁闷, 在网上搜了好多方法都是不行,无奈自己找办法,无意中发现了一个解决方法,希望能与大家分享下. 解决方法如下:1.在“开始 -  运行” 中输入以下内容分三次来重新注册下Mergemod.dll. regsvr32 "C:\Program Files\Common Fil

对express中引入文件时提示Error: Cannot find module错误的理解

打算写个小demo,在引入一个routes文件时,一直提示Error: Cannot find module('./routes')的错误,经过一番了解. 如果要把整个文件夹下所有的模块都引进来  var routes = require('./routes')这时express会默认的去读取文件下的index.js文件,所以文件夹下所有的模块只需在index.js声明即可. 例如: 在routes文件下有user.js.count.js.index.js文件, 只需在index.js中 exp

ssh连接时提示THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED

ssh链接云主机: ssh [email protected] 报错:THE AUTHENTICITY OF HOST XX CAN’T BE ESTABLISHED 解决办法: ssh -o StrictHostKeyChecking=no [email protected] 输入密码,链接成功 与ssh中Host key verification failed问题一样. 网上很多的解决方案是:vi ~/.ssh/known_hosts 删除与想要连接的主机相关的行:或者直接删除known_h

SqlServer 2014 还原数据库时提示:操作系统返回了错误5,,拒绝访问

场景 在进行数据库还原时提示: System.Data.SqlError:在对”“尝试”“时,操作系统返回了错误5(拒绝访问) 实现 第一种方案是修改要还原的数据库备份文件的权限. 找到备份文件右击属性--安全--组或用户名--编辑--添加--输入对象名称来选择 输入Everyone,然后编辑Everyone的权限为全部允许. 如果还是不行,采取第二种方案 退出SQL Server Management Studio ,然后切换登录验证方式 如果还不行,采用第三种方案. 打开SQL Server

docker安装步骤及基于docker容器部署web应用LNMP服务器环境

docker的介绍 docker的定义: 1.docker的三个概念:Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器Docker 镜像 - Docker images: Docker 镜像是 Docker 容器运行时的只读模板Docker 仓库 - Docker registeries: Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库(Docker Hub)Docker 容器 - Docker containers:每一个 Docke

docker6 构建docker容器集群

十五.构建docker集群 让不同主机中的docker容器可以互相访问. 本章介绍几种解决方案,包括利用端口映射实现容器之间的快速互联,使用Ambassador容器解决跨主机的容器互联. 15.1 使用自定义网桥连接跨主机容器 docker默认的网桥是docker0,它只会在本机连接所有的容器. 容器的虚拟网卡在主机上看一般叫做veth*而docker0网桥把所有这些网卡桥接在一起. 可以把这个网络看成是一个私有的网络,如果要让外网连接到容器中,就需要做端口映射,即-p参数. 15.2 使用Am