![](/img/trans.png)
[英]Mongo container with a replica set with only one node in docker-compose
[英]Unable to run mongo container with replica set using docker-compose
這是我的docker-compose文件:
version: '3'
services:
mongo:
hostname: mongo
container_name: search_mongo
image: mongo:latest
volumes:
- ./docker/local/persist/mongo:/data/db
- ./docker/mongo:/opt/mongo
ports:
- "8884:27017"
- "8885:27018"
entrypoint: /opt/mongo/entrypoint_mongo.sh
agent:
build: .
image: myapp_search:compose
depends_on:
- mongo
這是我的entrypoint_mongo.sh
#!/bin/bash
mongod --port 27018 --replSet rs0 --fork --syslog --smallfiles
mongo --port 27018 --eval "rs.initiate({_id : 'rs0', members : [{_id : 0, host : 'mongo:27018'}]})"
mongo --port 27018 --eval "while(true) {if (rs.status().ok) break;sleep(1000)};"
我面臨的問題是:mongo容器正在成功執行所有步驟,但是退出時的狀態為0。
mongo_1 | about to fork child process, waiting until server is ready for connections.
mongo_1 | forked process: 7
mongo_1 | child process started successfully, parent exiting
mongo_1 | MongoDB shell version v3.4.10
mongo_1 | connecting to: mongodb://127.0.0.1:27018/
mongo_1 | MongoDB server version: 3.4.10
mongo_1 | { "ok" : 1 }
mongo_1 | MongoDB shell version v3.4.10
mongo_1 | connecting to: mongodb://127.0.0.1:27018/
mongo_1 | MongoDB server version: 3.4.10
search_mongo exited with code 0
如果您在腳本中執行的最后一個命令永不退出(即停止運行),則您的容器將繼續運行。 因此, while (true);do sleep 1; done
while (true);do sleep 1; done
是一種解決方法。
如果您想要一個可以在需要時關閉容器的解決方案,可以使用類似
while (! test -e /tmp/stop); do sleep 1; done; rm /tmp/stop
因此,當您在命令行中說touch /tmp/stop
,它將停止使容器保持運行的循環。
您的啟動腳本不應初始化或監視副本集。 這些應該是手動任務。
您應該記住:
我強烈建議您進行三處更改:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.