Python Flask mongoengine/pymongo:在 mongo 的端口 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 创建了一个映像。像这样:

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

解决方法

您的 drain 命令不正确。 docker run 参数的格式为 -p

您的 -p CONTAINER_PORT:HOST_PORT 参数将所有请求从开发机器上的 27017 端口重定向到 docker 容器上的 27018 端口。

如果您尝试发布一系列端口,则必须为每个端口设置单独的 -p 27018:27017 参数。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...