Docker Compose部署下Python容器尝试通过localhost连接Mongo容器问题
问题根因及修复方案
1. 首要问题:Mongo服务启动配置错误
你的mongo_service中错误配置了command: mongo:
- 官方mongo镜像默认启动命令是
mongod,即Mongo数据库服务端,会监听27017端口提供服务 - 你覆盖为
mongo后,容器启动时会运行Mongo客户端程序,默认尝试连接本地127.0.0.1的服务端,容器内根本没有运行服务端进程,所以mongo_service容器本身启动就会失败,根本没有可用的Mongo服务
修复方式:直接删除mongo_service下的command: mongo配置行即可
2. 网络配置错误
你在compose末尾声明了外部网络db_net,但所有服务都没有指定加入该网络:
- 如果没有使用外部网络的特殊需求,直接删除compose末尾的
networks配置块即可,Docker Compose默认会为当前项目创建专属网络,服务之间可以直接用服务名互通 - 如果确实需要使用已有的外部
db_net网络,需要在每个服务的配置块下添加如下配置:
networks: - db_net
3. 额外排查点
- 检查你的Python项目中是否有环境变量、全局配置文件指定了Mongo连接地址为127.0.0.1,这类配置的优先级通常高于代码中直接写的
MongoClient参数 depends_on仅控制容器启动顺序,不会等待Mongo服务完全就绪再启动API服务,建议给mongo_service添加健康检查,确保Mongo启动完成后再启动API:
# 添加到mongo_service配置块下 healthcheck: test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet interval: 5s timeout: 5s retries: 5
同时修改cinemas_api的depends_on配置:
depends_on: mongo_service: condition: service_healthy
内容的提问来源于stack exchange,提问作者harry morgan
相关产品推荐
相关产品推荐

