gpt4 book ai didi

mongodb - 如何在 docker-compose 之后运行 Mongo shell 命令?

转载 作者:可可西里 更新时间:2023-11-01 10:46:35 27 4
gpt4 key购买 nike

我想启动这个 MongoDB 副本集:

version: "3"

services:
mongo1:
image: mongo
ports:
- 27017:27017
command: mongod --replSet rs0
mongo2:
image: mongo
ports:
- 27018:27017
command: mongod --replSet rs0
mongo3:
image: mongo
ports:
- 27019:27017
command: mongod --replSet rs0

等待它们出现,然后通过终端访问 Mongo shell:

docker exec -it mongo1 mongo

然后在 Mongo shell 中执行:

rs.initiate({"_id":"rs0","members":[{"_id":0,"host":"mongo1:27017"},{"_id":1,"host":"mongo2:27017"},{"_id":2,"host":"mongo3:27017"}]})

Mongo 还允许 mongo --eval "rs.initiate(..)",这可能会使事情变得更容易。

我的问题是如何在 mongo1、mongo2、mongo3 启动后运行此命令?

最佳答案

你可以这样做,我最近不得不运行 mongo --repair 然后运行 ​​MongoDB 本身,在 MongoDB 启动后我需要将我的用户添加到数据库,你可以轻松地改变事情只有在所有三个 MongoDB 都启动后才运行命令。

可能的 docker-compose.yml:

version: "2"
services:
mongo:
container_name: mongo
restart: on-failure:10
image: mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=<user>
- MONGO_INITDB_ROOT_PASSWORD=<pass>
- MONGO_INITDB_DATABASE=db
volumes:
- ./data:/data/db
ports:
- "27017:27017"
command: bash -c "mongod --repair && mongod"

mongoClient:
image: mongo
container_name: mongoClient
links:
- mongo
volumes:
- ./deployment_scripts:/deployment_scripts
command:
- /deployment_scripts/add_user.sh
depends_on:
- mongo

app:
container_name: app
restart: always
build: .
volumes:
- .:/usr/src/app
ports:
- "3000:3000"
depends_on:
- mongoClient
links:
- mongo

我的 /deployment_scripts/add_user.sh 脚本等待 MongoDB 启动:

until mongo --host mongo --eval "print(\"waited for connection\")"
do
sleep 1
done

// you can add more MongoDB waits here

echo "Adding user to MongoDB..."
mongo --host mongo --eval "db.createUser({ user: \"<user>\", pwd: \"<pass>\", roles: [ { role: \"root\", db: \"admin\" } ] });"
echo "User added."

请注意,您可以通过将 --host mongo 替换为 --host mongo1 --host mongo2 来解决所有三个 MongoDB和 --host mongo3。您将对脚本中的两个 eval 命令使用它。

归功于这个 SO 答案 https://stackoverflow.com/a/45060399/4295037我使用的(until mongo ...)。

关于mongodb - 如何在 docker-compose 之后运行 Mongo shell 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50536812/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com