2016-10-10 23 views
1

我有一個名爲hi_mongo和id 123456789 mongoDB泊塢窗我有一些數據已經存儲在數據庫中。我已經停止了它,並用命令重新啓動:
docker restart 123456789重新啓動mongodb泊塢窗與驗證

但是現在我想重新啓動該docker,並啓用授權。如何在不製作新的mongoDB docker的情況下做到這一點。 -

我已經試過到目前爲止使用進入這個MongoDB的容器:
docker exec -it 123456789 /bin/bash
,並試圖編輯/etc/mongo.conf.orig file和設置authorization:'enabled'想,當我重新從主機的mongod泊塢窗將啓用身份驗證重新啓動,但事實並非案件。

+0

重新啓動Docker容器和在容器中運行的'mongod'進程有區別。爲了啓用MongoDB身份驗證功能,您只需重新啓動'mongod'進程。有關步驟,請參見[MongoDB啓用身份驗證](https://docs.mongodb.com/manual/tutorial/enable-authentication/)。 –

+0

爲什麼你不想創建一個新的mongoDB docker容器?使用碼頭卸下容器並更換新容器非常快捷方便;我們一直在爲這樣的情況做這件事。 –

+0

除了Vince的說法外,'mongodump'和'mongorestore'都非常易於使用。在主機上安裝它們以獲取數據,重建容器並重新導入數據。如果你關心數據,那麼你應該有一個過程來備份和恢復。也就是說,您應該能夠按照您的建議編輯mongo配置並重啓容器。你是否真的需要編輯'/ etc/mongo.conf',而不是'/ etc/mongo.conf.orig'或者是你的問題中有一個錯字? – boyvinall

回答

0

我使用的是MongoDB 3.4,它看起來很好。 我所做的是

  • 停止正在運行的容器。 (docker stop your_container_name)
  • db.createUser({「user」:「admin」,「pwd」:「password」,「roles」:[{role:「root」,db:「admin」}]}) ;
  • 編輯你的mongodb配置。 (在我的情況下/etc/mongod.conf)
  • 重新啓動您的容器。 (docker restart your_container_name)

當您在登錄後嘗試創建新用戶時,您將收到錯誤消息。

db.createUser({"user":"demo","pwd":"password","roles":[ {role:"read",db:"admin"}]}); 2016-12-24T14:17:43.949+0000 E QUERY
[main] Error: couldn't add user: not authorized on admin to execute command { createUser: "demo", pw d: "xxx", roles: [ { role: "read", db: "admin" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 300000.0 } } : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/db.js:1290:15

希望這可以幫助你。

0

能夠通過修改容器中的entrypoint.sh來啓用auth。嘗試以下步驟:

1)泊塢窗EXEC -IT您的容器慶典

2)找出運行中的蒙戈CONFIGS。它可能只是exec mongod。但爲了安全起見,先找出它。

sed -i 's/exec "[email protected]"/echo "new entrypoint [email protected]" > \/tmp\/echo.txt/g' entrypoint.sh

停止和重新啓動容器。附加到容器並檢查/tmp/echo.txt。

3)在entrypoint.sh中用exec mongod --auth代替exec "[email protected]"

4)重新啓動容器,mongod應該在啓用auth的情況下運行。

您應該真的考慮將數據存儲在容器中的容器中。