兩個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 [root@localhost ~]# docker run -d -p 53306:3306 -e MYSQL_ROOT_PASSWORD=123456 test01/mariadb
2 2c564a3484a4424b18e413fb11c6a71d76098f7e2e30b3ea8ad4e1b987e249a8
3 [root@localhost ~]# 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 [root@localhost ~]# 

這個時候我們用客戶端來訪問一下,測試53306這個端口是否能連接到我們的數據庫:

連接成功了,說明端口映射是成功的,從外部訪問宿主機的53306端口能正常的映射到容器上的3306端口。

好的,接下來,再啟動一個tomcat的容器,將應用的jdbc連接指向宿主機的53306端口,來看看是否可以連通呢。

1 [root@localhost ~]# docker run -it -p 52080:8080 test01/wbserv /bin/bash
2 [root@168081c42f91 /]# 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 [root@168081c42f91 /]#

這個時候tomcat也起來了,接下來是配置應用和開啟應用:(注意IP和端口號,都用宿主機的ip和端口)

 

好了,接下來,啟動應用,可以發現應用起不來,然后查看下啟動日志:

[root@168081c42f91 /]# 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

重啟應用,問題解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM