同一Docker网络内应用容器无法连接MySQL容器问题问询
问题根因及修复方案
配置错误确认
你的docker-compose.yml存在明确配置错误,问题出在app服务的SPRING_DATASOURCE_URL环境变量配置。
错误原因解释
- Docker同自定义网络内的容器互相通信时,仅需要使用目标容器的内部服务端口,不需要使用映射到宿主机的端口。
- 你为
mysqlserver服务配置的端口规则"5647:3306",仅作用于宿主机/外部网络访问MySQL的场景,将宿主机5647端口转发到MySQL容器内部的3306端口,同网络内的其他容器无法通过5647端口访问MySQL服务。 - 当前配置中应用尝试访问
mysqlserver:5647,但MySQL容器内部仅监听3306端口,因此触发连接拒绝报错。
修复方案
将app服务的SPRING_DATASOURCE_URL配置修改为如下内容即可:
jdbc:mysql://mysqlserver:3306/database?verifyServerCertificate=false&useSSL=false&requireSSL=false&autoReconnect=true
额外注意事项
depends_on仅能保证容器的启动顺序,无法保证MySQL服务内部初始化完成后再启动应用容器。如果修改端口后仍偶现连接失败问题,可以给应用容器增加启动等待逻辑,等MySQL端口可用后再启动应用服务。
内容的提问来源于stack exchange,提问作者hc0re
相关产品推荐
相关产品推荐

