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')>]>

我用docker创建了一个镜像,端口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

您的docker run命令错误。参数-p的格式为-p CONTAINER_PORT:HOST_PORT

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

如果你试图发布一系列端口,你必须为每个端口设置单独的-p参数。

最新更新