【问题标题】:docker-composed built flask with mongoEngine, trying connect but returned pymongo error?docker-composed 用 mongoEngine 构建烧瓶,尝试连接但返回 pymongo 错误?
【发布时间】:2021-10-22 19:16:14
【问题描述】:
pymongo.errors.ServerSelectionTimeoutError
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 6173037b75e69e32feeca143, topology_type: Single, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 111] Connection refused')>]>
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2088, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2073, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/local/lib/python3.7/site-packages/flask_cors/extension.py", line 165, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 671, in error_router
    return original_handler(f)
  File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 669, in error_router
    return self.handle_error(e)
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2070, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1515, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.7/site-packages/flask_cors/extension.py", line 165, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 671, in error_router
    return original_handler(f)
  File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 669, in error_router
    return self.handle_error(e)
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1513, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1499, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "/usr/local/lib/python3.7/site-packages/flask_restx/api.py", line 403, in wrapper
    resp = resource(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask/views.py", line 83, in view
    return self.dispatch_request(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/flask_restx/resource.py", line 49, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/app/auth/controller.py", line 35, in post
    return AuthService.login(login_data)
  File "/app/auth/service.py", line 16, in login
    user = User.objects(username='daas').first()
  File "/usr/local/lib/python3.7/site-packages/mongoengine/queryset/manager.py", line 38, in __get__
    queryset = queryset_class(owner, owner._get_collection())
  File "/usr/local/lib/python3.7/site-packages/mongoengine/document.py", line 215, in _get_collection
    db = cls._get_db()
  File "/usr/local/lib/python3.7/site-packages/mongoengine/document.py", line 193, in _get_db
    return get_db(cls._meta.get("db_alias", DEFAULT_CONNECTION_NAME))
  File "/usr/local/lib/python3.7/site-packages/mongoengine/connection.py", line 364, in get_db
    conn_settings["username"], conn_settings["password"], **auth_kwargs
  File "/usr/local/lib/python3.7/site-packages/pymongo/database.py", line 1581, in authenticate
    connect=True)
  File "/usr/local/lib/python3.7/site-packages/pymongo/mongo_client.py", line 810, in _cache_credentials
    writable_preferred_server_selector)
  File "/usr/local/lib/python3.7/site-packages/pymongo/topology.py", line 246, in select_server
    address))
  File "/usr/local/lib/python3.7/site-packages/pymongo/topology.py", line 203, in select_servers
    selector, server_timeout, address)
  File "/usr/local/lib/python3.7/site-packages/pymongo/topology.py", line 220, in _select_servers_loop
    (self._error_message(selector), timeout, self.description))
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 6173037b75e69e32feeca143, topology_type: Single, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 111] Connection refused')>]>

码头工人撰写文件

   api:
    build: api
    image: azurecr.io/api
    ports:
      - "5000:5000"
    environment:
      - "ENV=prod"
      - "DB_USERNAME=name"
      - "DB_PASSWORD=password"
      - "DB_HOST=mongodb"
    depends_on:
      - "mongodb"
 mongodb:
    image: mongo
    container_name: mongodb
    command: mongod
    environment:
      - "MONGO_INITDB_ROOT_USERNAME=name"
      - "MONGO_INITDB_ROOT_PASSWORD=password"
    volumes:
      - dbdata:/data/db
volumes:
  dbdata:

【问题讨论】:

    标签: mongodb flask docker-compose


    【解决方案1】:

    您在代码中的某处设置了 MongoDB 连接字符串。它没有像您预期的那样接收DB_HOST(默认为localhost)。

    如果您可以编辑您的问题,请在您建立 MongoDB 连接的行中添加,那么这将有所帮助。

    【讨论】:

    • // 对于初始化数据库连接,只需将此配置加载到 app.py 我已经打开本地 mongoservice //我也尝试了命令:mongod --port 27017 --bind_ip 0.0.0.0 in docker -compose, nor MONGO_HOST = 'mongodb://127.0.0.1:27017/mongodb', 它们都不起作用 // 认证一直失败 // config class ProductionConfig(Config): + MONGODB_HOST = 'mongodb://mongodb/ prod' + MONGODB_USERNAME = os.getenv("DB_USERNAME") + MONGODB_PASSWORD = os.getenv("DB_PASSWORD") //app app.config.from_object(config_by_name[os.getenv('ENV') or 'default']) db .init_app(app)
    • 可能你在某处混淆了 MONGO_HOST、MONGODB_HOST 和 DB_HOST 环境变量。
    • 如果我使用的是 mysql,我什至不需要添加这些项目,只需 db: image: mysql environment: MYSQL_ROOT_PASSWORD: root ports: - "3307:3306" 就可以了跨度>
    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2017-05-02
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多