首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从另一个docker容器连接到Mongodb副本集失败

从另一个docker容器连接到Mongodb副本集失败
EN

Stack Overflow用户
提问于 2020-09-03 11:21:29
回答 1查看 323关注 0票数 0

为了使用mongo transaction,我在docker中创建了一个独立的副本集:

dockerfile如下:

代码语言:javascript
复制
FROM mongo:4.4-bionic
RUN echo "rs.initiate({'_id':'rs0','members':[{'_id':0,'host':'mongodb-host:27017'}]});" > /docker-entrypoint-initdb.d/replica-init.js
RUN cat /docker-entrypoint-initdb.d/replica-init.js
CMD [ "--bind_ip_all", "--replSet", "rs0"]

和命令行(我没有使用docker-compose):

代码语言:javascript
复制
docker run -d -p 27017:27017 --restart=always -e TZ=Asia/Shanghai --network mongo-network --name mongodb-host mongodb-image mongod --replSet rs0 --port 27017 --bind_ip_all

当我从独立的java应用程序(使用spring引导数据)连接时,它工作得很好,URI如下:

代码语言:javascript
复制
spring.data.mongodb.uri=mongodb://localhost:27017/db_mongo?replicaSet=rs0

但是在我构建了我的应用程序并在docker中部署之后,我就不能再连接到它了,对于URI,如下所示:

代码语言:javascript
复制
spring.data.mongodb.uri=mongodb://mongodb-host:27017/db_mongo?replicaSet=rs0

我可以ping这个容器内的mongodb-host,网络看起来很好。

顺便说一句,在我切换到副本集之前,它工作得很好。

有什么想法吗?这是与身份验证相关的问题吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-04 16:14:05

好了,我设法解决了这个问题。

仔细阅读mongodb docker日志后,我注意到在执行rs.initiate()时出现了一个错误。奇怪的是,只有当我使用"mongodb- host“作为主机名时,才会出现这个错误,可能是因为docker网络还没有准备好。

所以我为init写了一个shell:

代码语言:javascript
复制
sleep 5
mongo --eval "rs.initiate({'_id':'rs0','members':[{'_id':0,'host':'mongodb-host:27017'}]})"

并在docker container启动后单独运行:

代码语言:javascript
复制
docker exec mongodb-host /bin/sh /root/mongodb_rs_init.sh

然后它就起作用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63716307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档