多Mongo容器Docker-Compose配置连接失败求助
问题排查与解决建议
核心原因
你踩了Docker容器间通信的典型坑:容器内部交互不需要用宿主机的端口映射。
- mongo-db-showcase-db容器里的MongoDB实际监听的是容器内部的
27017端口,宿主机的27018端口只给宿主机本机或外部设备访问用,容器之间通信完全用不上它。 - 你的backend-showcase服务硬连容器IP的
27018端口,但这个端口在容器内部根本没开放,直接被拒绝很正常。而backend-manager能成功,大概率是它用了服务名+内部27017端口的正确方式连接。
解决步骤
修正连接字符串
把backend-showcase的MongoDB连接字符串改成:mongodb://mongo-db-showcase-db:27017/你的数据库名用Docker Compose里的服务名
mongo-db-showcase-db代替容器IP,Docker会自动解析到对应容器;端口直接用容器内部的27017,别再用宿主机映射的27018。确认网络归属
确保backend-showcase和mongo-db-showcase-db在同一个Docker网络里(默认Docker Compose会自动创建专属网络,所有服务默认都在这个网络里,除非你手动改了配置)。可以用命令验证:docker inspect 你的项目名_default检查输出里的容器列表,确认两个服务的容器都在其中。
检查MongoDB启动状态
查看mongo-db-showcase-db的日志,确认MongoDB正常启动并监听0.0.0.0:27017(允许任意IP访问):docker logs mongo-db-showcase-db日志里出现
waiting for connections on port 27017,就说明容器内的MongoDB没问题。测试容器间连通性
进入backend-showcase容器,直接测试与mongo服务的连通性:docker exec -it backend-showcase bash ping mongo-db-showcase-db mongo mongodb://mongo-db-showcase-db:27017如果能ping通且mongo命令能成功连接,说明网络和MongoDB都正常,问题肯定出在你的应用连接配置上。
内容的提问来源于stack exchange,提问作者Domenico
相关产品推荐
相关产品推荐

