两个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这个端口暴露给宿主机:
[root@localhost ~]# docker run -d -p : -e MYSQL_ROOT_PASSWORD= test01/mariadb
2c564a3484a4424b18e413fb11c6a71d76098f7e2e30b3ea8ad4e1b987e249a8
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2c564a3484a4 test01/mariadb "docker-entrypoint.sh" seconds ago Up seconds 0.0.0.0:->/tcp berserk_cray
[root@localhost ~]#
这个时候我们用客户端来访问一下,测试53306这个端口是否能连接到我们的数据库:

连接成功了,说明端口映射是成功的,从外部访问宿主机的53306端口能正常的映射到容器上的3306端口。
好的,接下来,再启动一个tomcat的容器,将应用的jdbc连接指向宿主机的53306端口,来看看是否可以连通呢。
[root@localhost ~]# docker run -it -p : test01/wbserv /bin/bash
[root@168081c42f91 /]# sh /opt/apache-tomcat-7.0./bin/startup.sh
Using CATALINA_BASE: /opt/apache-tomcat-7.0.
Using CATALINA_HOME: /opt/apache-tomcat-7.0.
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0./temp
Using JRE_HOME: /usr/java/jdk1..0_79/jre
Using CLASSPATH: /opt/apache-tomcat-7.0./bin/bootstrap.jar:/opt/apache-tomcat-7.0./bin/tomcat-juli.jar
Tomcat started.
[root@168081c42f91 /]#

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


好了,接下来,启动应用,可以发现应用起不来,然后查看下启动日志:
[root@168081c42f91 /]# tail -n logs/catalina.out

提示开头说的这个错误,No route to host。
这个问题,估计可以通过修改hosts文件来解决,但是我没有这有这样做,有想去的朋友可以去尝试,最后考虑到日后会有大规模部署的需要,此处改成link连接,如:
--link mysql_name:tomysql
只需要将原来的jdbc连接改为
jdbc:mysql://tomysql:3306/drools?characterEncoding=utf-8
重启应用,问题解决。
两个docker容器互连时,提示no route to host错误的问题的更多相关文章
- Docker容器启动时初始化Mysql数据库
1. 前言 Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行.那么怎么初始化 SQL脚本以及数据呢? 我这里有两个传统方案 ...
- 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon socket"类情况
Docker安装命令: 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon ...
- 利用Openvswitch实现不同物理机中的Docker容器互连
1. 测试环境 75机(10.11.150.75):Red Hat Enterprise Linux Server 7.0,无外网访问权限,已安装Docker Server 74机(10.11.150 ...
- docker容器互连
三种方式 1.使用容器连接的示例如下: $ docker run --name some-app --link itbilu-mysql:mysql -d application-that-uses- ...
- Loadrunner12.5-录制http://www.gw.com.cn/网页时提示“SSL身份验证失败”错误,这是为什么呢?
问题:LR产品,录制http://www.gw.com.cn/ 网页时提示下图错误,这是为什么呢? 请在如下recording options中选择正确的SSL版本,再进行录制. 注:如何确定那个SS ...
- docker容器启动时执行脚本 run /bin/bash执行多条指令
搜了很多资料发现并未解决,以下方法失败!求大神评论给出完美方案 1.首先需要编写需要启动的脚本,并将脚本放在 /etc/init.d/目录下 如:cs.sh 2.修改权限 3.chkconfig -- ...
- 快速解决docker生成镜像时提示Could not resolve ‘archive.ubuntu.com’问题
今天在其中一台Linux 中使用Docker命令创建镜像时失败,报错提示: Temporary failure resolving ‘archive.ubuntu.com’ 典型的DNS解析问题,尝试 ...
- 不同network中的两个docker容器
1. 创建docker网络 docker network create --subnet 172.18.0.1/16 test docker network ls 2. 创建两个容器指定docker ...
- docker 容器启动时设置环境变量source
镜像启动时,自动执行的是~/.bashrc文件,所以,环境变量需要配置在该文件内,这样镜像启动时,可自动执行该文件,使环境变量生效. vi ~/.bashrc ------------------- ...
随机推荐
- 如何一键式搭建微信小程序
有了微信小程序,对你到底意味着什么? 对于用户来说,再也不用担心手机的内存不够用了!一个小程序只有1M,随便卸载一个App,就能安装很多小程序! 对于老板来说,你不再需要花费数十万来去请外包公司帮你去 ...
- ajax 拼接html标签 thinkphp
ajax 拼接html标签 thinkphp框架 一.html部分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional ...
- js获取指定格式的时间字符串
如下: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1- ...
- MyBatis开发Dao层的两种方式(Mapper动态代理方式)
MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...
- POJ2533(KB12-N LIS)
Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 50827 Acc ...
- JS 模块 p6
利用了闭包的模块: 简单模块例子: function fn(){ ; function y(){ console.log(x); } return { y:y} }var do1 = fn() do1 ...
- js 复制粘贴
input输入框<div id="top-title" style="position: relative"> <img class=&quo ...
- page、request、session和application有什么区别?
转自:http://liuyuru.iteye.com/blog/773367 1.简单说 page指当前页面.在一个jsp页面里有效 2.request 指从http请求到服务器处理结束,返回响应的 ...
- ss 重新设置 端口的方法 记录
1. 选择 ssh 进行远程登入: ssh root@服务器ip -p 端口, 事例如:ssh root@176.122.134.96 -p 28202 2. ls 展示 当前目录下的文件,看到有 s ...
- 语义slam用于高精地图和高精定位的一些想法
最近一直在考虑语义slam在自动驾驶和辅助驾驶中的用法,研究了一下视觉为主的高精度地图+高精定位的模式,特别是mobileye的REM. 秉承先建图再定位的思路,在服务器端(云端)建图,在车端定位. ...