Docker容器相连时出现"no route to host"错误
情景简述docker容器之间可以通过link参数互连。容器也可以将内部端口映射到宿主机上。假设,宿主机ip为192.168.10.1,将一个Spring Boot应用将端口映射到宿主机8080:58080;该应用对应的MySQL数据库容器端口映射到宿主机3306:13306。问题描述基于上述情景,将SpringBoot应用配置文件中jdbc连接的url改为jdbc:mysql://192.1...
情景简述
docker容器之间可以通过link
参数互连。容器也可以将内部端口映射到宿主机上。假设,宿主机ip为192.168.10.1
,将一个Spring Boot应用将端口映射到宿主机8080:58080
;该应用对应的MySQL数据库容器端口映射到宿主机3306:13306
。
问题描述
基于上述情景,将SpringBoot应用配置文件中jdbc连接的url改为jdbc:mysql://192.168.10.1:13306xxxx
。这样的修改实际看起来可行,然而实际却会出现
no route to host
的错误。
问题重现
(1)启动一个MySQL容器
$ docker run -d -p 3306:13306 -e MYSQL_ROOT_PASSWORD=123456 --name=sql mysql
此时使用第三方软件连接MySQL数据库是成功的,说明端口映射是成功的。
(2)启动一个SpringBoot应用镜像生成的容器(application.yml中数据库链接为jdbc:mysql://192.168.10.1:13306xxxx
)
$ docker run -d -p 8080:58080 -e db=192.168.10.1:13306 --name=app app:1.0
此时我们会发现应用无法启动,查看日志出现java.net.NoRouteToHostExeeption: No route to host
。
解决方法
(1)修改Spring Boot应用的启动命令:
docker run -d -p 8080:58080 -e db=tomysql:3306 --link sql:tomysql --name=app app:1.0
此时spring boot应用正常连接数据库,启动成功。
(2)解决方式2
修改docker的配置⽂件,新增配置--userland-proxy=true
,如
OPTIONS='--userland-proxy=true
’
更多推荐
所有评论(0)