同一Docker自定义网络下服务端容器无法连接MySQL容器问题求助
核心问题
同Docker网络内的容器互相访问时,应使用目标容器内部监听的端口,而非宿主机映射端口。你配置的3307是宿主机侧的映射端口,MySQL容器内部实际监听的是3306端口,因此连接被拒绝。
修复步骤
- 修改TypeORM数据库连接配置,将端口参数从
3307改为3306:
await createConnection({ type: "mysql", host: "larecipe-database", port: 3306, // 替换为容器内部MySQL监听端口 username: MYSQL_USER, password: MYSQL_PASSWORD, database: MYSQL_DATABASE, // 其余配置保持不变 })
- 重新构建服务端镜像并重启服务端容器,即可正常连接数据库。
其他异常排查方案
如果修改端口后仍无法连接,可按以下顺序排查:
- 确认MySQL容器启动状态:执行
docker ps查看larecipe-database是否处于运行中状态,若启动失败,执行docker logs larecipe-database查看数据库启动日志排查问题,官方MySQL镜像首次启动需要执行初始化操作,通常耗时10~30秒,若服务端容器早于数据库完全启动,也会出现连接失败的问题,可以先启动数据库,确认运行正常后再启动服务端。 - 宿主机侧用MySQL Workbench连接时,host填
127.0.0.1、端口填3307即可,若仍无法连接,优先排查数据库容器本身的启动问题。 - 可以进入服务端容器手动测试网络连通性:执行
docker exec -it larecipe-server bash进入容器,安装telnet工具后执行telnet larecipe-database 3306,确认网络链路正常。
内容的提问来源于stack exchange,提问作者chai
相关产品推荐
相关产品推荐

