2016-10-10 36 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的情况下运行。

您应该真的考虑将数据存储在容器中的容器中。