You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Gunicorn的Flask Docker容器连接MongoDB Docker容器时出现pymongo.errors.ServerSelectionTimeoutError问题求助

看起来你遇到的问题主要来自三个核心点:Docker网络隔离、连接字符串的端口错误,还有密码中特殊字符的转义问题。我来一步步帮你解决:

1. 解决Docker网络隔离问题

你现在用了两个独立的docker-compose.yml文件,Docker默认会为每个compose项目创建一个专属网络,这就导致你的Flask容器(xyz)和MongoDB容器(transactionsDB)处于完全隔离的网络环境,自然无法互相访问。

最优解决方案:把两个服务合并到同一个docker-compose.yml文件中,这样它们会自动加入同一个默认网络,就能通过服务名/容器名直接通信。修改后的完整配置如下:

version: '3.7'
services:
  web:
    build: .
    image: 'flask/flask_docker'
    container_name: 'xyz'
    ports:
      - 4444:4444
    # 确保MongoDB先启动再启动Flask服务
    depends_on:
      - database
    networks:
      - app-network

  database:
    image: 'mongo:3.6.8'
    container_name: 'transactionsDB'
    environment:
      - MONGO_INITDB_DATABASE=abc
      - MONGO_INITDB_ROOT_USERNAME=abc
      - MONGO_INITDB_ROOT_PASSWORD=abc@v_1
    ports:
      - '5555:27017'
    volumes:
      - /home/ubuntu/abc/:/data/db
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

2. 修正MongoDB连接字符串

你的原连接字符串存在两个关键错误:

  • 端口用了主机映射的5555,但容器之间访问应该用Mongo容器内部的默认端口27017(端口映射只用于主机和容器的通信)
  • 密码里的@没有转义,它会被解析成用户名与主机地址的分隔符,导致连接字符串格式失效,需要把@转义成URL编码的%40
  • 额外注意:因为你用的是Mongo的root用户(MONGO_INITDB_ROOT_USERNAME),需要指定authSource=admin来从管理员数据库认证

修正后的连接字符串应该是:

mongodb://abc:abc%40v_1@transactionsDB:27017/abc?authSource=admin

3. 验证与启动步骤

  1. 先清理之前运行的容器:
# 如果之前分别启动了两个compose,各自执行docker-compose down;或者直接删除容器
docker rm -f xyz transactionsDB
  1. 使用合并后的docker-compose.yml重新构建并启动服务:
docker-compose up -d --build
  1. 查看日志确认服务状态:
# 检查Flask应用日志,看是否有连接成功的信息
docker logs xyz
# 检查MongoDB日志,确认数据库正常启动
docker logs transactionsDB
  1. (可选)进入Flask容器内部直接测试连接:
docker exec -it xyz bash
# 在容器内运行Python代码测试连接
python -c "import pymongo; client = pymongo.MongoClient('mongodb://abc:abc%40v_1@transactionsDB:27017/abc?authSource=admin'); print('Connected successfully! Databases:', client.list_database_names())"

这样应该就能彻底解决pymongo.errors.ServerSelectionTimeoutError的问题了。

内容的提问来源于stack exchange,提问作者Abhishek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:28:10