【发布时间】:2020-04-25 00:50:06
【问题描述】:
我有一个 docker-compose.yml 文件,它制作了三个 mongo 容器,其中包括三个副本集,我的容器构建没有任何问题,但是当我的服务正常运行时 setupmongo.sh 不起作用。我的意思是 rs.initiate() 函数不适用于 bash 文件,但是当我尝试手动运行带有其参数的 rs.initiate() 函数时(在 docker 交互式终端中)它工作正常,我的副本的行为应如此。结果我需要在 bash 文件上运行 rs.initiate() 函数
这是我的 docker-compose.yml 文件
version: "3.3"
services:
mongo1:
hostname: mongo1
container_name: mongo1
image: mongo:4.0.4
command: mongod --replSet devrs
volumes:
- ./mongodb/data1/db:/data/db
- ./mongodb/data1/configdb:/data/configdb
networks:
- mongo-dev-net
expose:
- 27017
ports:
- 30001:27017
restart: always
mongo2:
hostname: mongo2
container_name: mongo2
image: mongo:4.0.4
command: mongod --replSet devrs
volumes:
- ./mongodb/data2/db:/data/db
- ./mongodb/data2/configdb:/data/configdb
networks:
- mongo-dev-net
expose:
- 27017
ports:
- 30002:27017
restart: always
mongo3:
hostname: mongo3
container_name: mongo3
image: mongo:4.0.4
command: mongod --replSet devrs
volumes:
- ./mongodb/data3/db:/data/db
- ./mongodb/data3/configdb:/data/configdb
networks:
- mongo-dev-net
expose:
- 27017
ports:
- 30003:27017
restart: always
mongo-config:
container_name: mongo-config
image: alpine
networks:
- mongo-dev-net
depends_on:
- mongo1
- mongo2
- mongo3
volumes:
- ./setupmongo.sh:/setupmongo.sh
entrypoint: ["/setupmongo.sh"]
networks:
mongo-dev-net:
还有 setupmongo.sh 文件
#!/bin/bash
echo "Start"
mongo <<EOF
rs.config()
rs.initiate(
{
"_id" : "devrs",
"members" : [
{
"_id" : 0,
"host" : "mongo1:27017",
"priority": 2
},
{
"_id" : 1,
"host" : "mongo2:27017",
"priority": 0
},
{
"_id" : 2,
"host" : "mongo3:27017",
"priority": 0
}
]
}
)
EOF
最后没有初始化副本集
【问题讨论】:
-
他正在尝试连接到它自己的
27017端口,而你没有运行任何东西。mongo-config:27017中不应该有数据库吗? -
当你的脚本运行
mongo时,它怎么知道连接到哪里? -
@samthegolden 你的意思是我应该删除 mongo-config 服务并相应地添加“入口点:[”/setupmongo.sh”]“mongo 服务 mongo1, mongo2, mongo3
-
我不知道mongo。但可能是的。
-
@DavidMaze 更新了 docker-compose.yml 文件,不幸的是仍然无法正常工作
标签: mongodb bash docker docker-compose replication