Python Flask mongoengine/pymongo: в соединении отказано на порту 27018 монго

Ошибка:

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

Я создал образ с докером с портом 27018. Как это:

docker run --name test -e MONGODB_DATABASE=ms-content-test -e MONGODB_USER=ms-content-test -e MONGODB_PASS=ms-content-test  **-p 27018:27017** -d mongo

В моем файле config.py для тестов я создал соединение следующим образом:

class TestingConfig:
    TESTING = True
    DEBUG = True

    # Database Test
    DB = os.environ.get('DB', 'ms-content-test')
    USERNAME = os.environ.get('USERNAME', 'ms-content-test')
    PASSWORD = os.environ.get('PASSWORD', 'ms-content-test')
    HOST = os.environ.get('HOST', 'localhost')
    PORT = int(os.environ.get('PORT', 27018))

    MONGO_URI = 'mongodb://{username}:{password}@{host}:{port}/{database}'.format(
        username=USERNAME,
        password=PASSWORD,
        host=HOST,
        port=PORT,
        database=DB
    )

Теперь, когда я пытаюсь протестировать приложение, порт 27018 не работает. Порт 27017 работает нормально. В MONGO_URI я уже пытался передать некоторые аргументы, такие как authSource="admin" или использовать переменные pymongo для подключения, но ничего не работает.

Внутренне похоже на то, что Mongodb всегда заставляет использовать порт 27017. Это библиотека mongoengine: https://github.com/MongoEngine/mongoengine/blob/master/mongoengine/connection.py


person Gabriel Roger    schedule 01.02.2021    source источник


Ответы (1)


Ваша команда docker run неверна. Формат аргумента -p-p CONTAINER_PORT:HOST_PORT.

Ваш аргумент -p 27018:27017 перенаправляет все запросы с порта 27017 на вашем компьютере для разработки на порт 27018 в вашем док-контейнере.

Если вы пытаетесь опубликовать диапазон портов, вам нужно будет иметь отдельные аргументы -p для каждого из них.

person Ali Samji    schedule 01.02.2021