【问题标题】:How can I connect to a mongoDB cloud cluster from docker container?如何从 docker 容器连接到 mongoDB 云集群?
【发布时间】:2020-11-01 15:10:46
【问题描述】:

我正在开发一个 django-react 应用程序并使用 mongoDB 集群来存储数据。当我在不使用 docker 的情况下运行应用程序时,我可以毫无问题地向数据库发出请求。但是,当我运行 docker 容器(一个用于我的后端,一个用于我的前端)时,我在后端遇到了这个错误:

File "/usr/local/lib/python3.9/site-packages/pymongo/topology.py", line 215, in _select_servers_loop

raise ServerSelectionTimeoutError(

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 5f9ece0f7962ee81cb819b63, topology_type: Single, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 111] Connection refused')>]>

我在 mongo_client.py 和 settings.py 中都有 mongodb 主机。在 settings.py 我有:

DATABASES = {
        'default': {
        'ENGINE': 'djongo',
        'NAME': '<mydb>',
        'HOST': 'mongodb+srv://mike:<mypassword>@cluster0.5u0xf.mongodb.net/<mydb>?retryWrites=true&w=majority',
        'USER': 'mike',
        'PASSWORD': '<mypassword>',
    }
}

我的 docker-compose yaml 看起来像:

version: "3.2"
services:
    portalbackend:
        restart: always
        container_name: code
        command: bash -c "python manage.py makemigrations &&
                        python manage.py migrate &&
                        python manage.py runserver 0.0.0.0:8000"
        build:
            context: ./PortalBackend/
            dockerfile: Dockerfile
        ports:
        - "8000:8000"
        networks:
        - db-net

    portal:
        restart: always
        command : npm start
        container_name: front
        build:
            context: ./portal/
            dockerfile: Dockerfile
        ports:
        - "3000:3000"
        stdin_open: true
        depends_on:
        - portalbackend
        networks:
        - db-net

networks:
    db-net:
        driver: bridge

我需要为 mongodb 创建一个容器吗?我最初尝试使用本地 mongodb 实例,但遇到了同样的问题,所以我尝试使用集群滚动。仍然遇到同样的问题。

【问题讨论】:

    标签: python mongodb docker djongo


    【解决方案1】:

    不,您不需要添加 mongo 容器,因为您的数据库位于 Atlas 中。

    请参阅我昨天发布的类似问题的答案:Django + Mongo + Docker getting pymongo.errors.ServerSelectionTimeoutError

    【讨论】:

      猜你喜欢
      • 2021-05-10
      • 1970-01-01
      • 2019-07-01
      • 2018-05-17
      • 2019-02-24
      • 2019-01-12
      • 2022-11-11
      • 2017-10-03
      • 2018-01-09
      相关资源
      最近更新 更多