[英]How to connect to a Mongo Standalone ReplicaSet, running in Docker, with Mongoose 6.0.8?
連接到在 Docker 中運行的 MongoDB(使用 ReplicaSet)在 5.13.9 中運行但在 6.0.8 中失敗
這是數據庫的 docker-compose.yml 文件:
version: '3.9'
services:
loggerdb:
image: mongo
container_name: loggerdb
command: ["--replSet", "rs0", "--bind_ip_all", ]
restart: always
ports:
- "27017:27017"
volumes:
- ./data:/data/db
environment:
MONGO_INITDB_DATABASE: logger
networks:
default:
external: true
name: logger-network
如您所見,沒有身份驗證,數據庫正在偵聽本地主機上的 27017。
數據庫運行在Docker Container中:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b42adb1e26ec 0bcbeb494bed "docker-entrypoint.s…" 3 hours ago Up 3 hours 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp loggerdb
代碼在 Typescript,對於版本 5.13.9 Mongoose,我使用以下代碼:
mongoose.connect('mongodb://localhost:27017/logger', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => {
app.listen(PORT, () => {
console.log(`Listening on ${PORT} for Log Messages`);
});
});
這里需要指定useNewUrlParser和useUnifiedTopology,否則會報錯。
結果是它工作正常。 該程序正在連接到數據庫,我可以向其中寫入內容。
6.0.8 的代碼略有不同:
mongoose.connect('mongodb://localhost:27017/logger?replicaSet=rs0')
.then(() => {
app.listen(PORT, () => {
console.log(`Listening on ${PORT} for Log Messages`);
});
});
useNewUrlParser 和 useUnifiedTopology 現在已過時,文檔顯示您需要將 ReplicaSet 指定為參數。
用這段代碼連接到6.0.8 Mongoose的結果如下:
[INFO] 14:33:33 ts-node-dev ver. 1.1.8 (using ts-node ver. 9.1.1, typescript ver. 4.3.5)
MongooseServerSelectionError: getaddrinfo ENOTFOUND b42adb1e26ec
[[ Removed the StackTrace ]]
[ERROR] 14:34:05 MongooseServerSelectionError: getaddrinfo ENOTFOUND b42adb1e26ec
使用 Mongoose 6.0.8 連接到在 Docker 中運行的 Mongo Standalone ReplicaSet 的正確方法是什么?
當我嘗試從本地主機連接到 docker 內的單個節點副本集時,我遇到了這個確切的問題(我還將 mongoose 從 v5 升級到 v6。)
我通過更改我的連接字符串解決了這個問題
mongodb://admin:pass@127.0.0.1:27017/testdb
到
mongodb://admin:pass@127.0.0.1:27017/testdb?directConnection=true
看起來 mongoose 強制使用 docker 主機名,這只有在您的代碼在 docker 內部運行時才有效。
directConnection - 指定是否強制將所有操作分派到連接 URI 中指定的主機。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.