Docker容器相连时出现"no route to host"错误

本文探讨了在Docker环境下,SpringBoot应用与MySQL数据库容器间的网络连接问题。通过实例演示了直接使用宿主机IP配置数据库连接可能出现的noroutetohost错误,并提供了两种解决方案:一是使用link参数优化容器间通信;二是调整Docker配置实现更稳定的网络连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情景简述

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会画画的画师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值