使用身份验证重新启动MongoDB Docker

3
我有一个名为hi_mongo,id为123456789的mongoDB docker。 我已经在数据库中存储了一些数据。我曾经停止过它,然后使用以下命令重新启动:
docker restart 123456789 但现在我想在启用授权的情况下重新启动此docker,而不必创建新的mongoDB docker。
目前为止我尝试的是-使用以下命令进入mongoDB容器:
docker exec -it 123456789 /bin/bash
并尝试编辑/etc/mongo.conf.orig文件,并设置authorization:'enabled'以便在从主机mongod重新启动docker时启用auth,但这并非事实。

@boyvinall,我尝试编辑.conf.conf.orig两个文件,并在两种情况下重新启动容器,但都没有帮助。此外,数据非常庞大,备份并在新容器中恢复非常困难(虽然不是不可能)。但我正在寻找更简单的解决方法。到目前为止,我还没有备份过程,但很快会开始处理。谢谢。 - atulj
1
@atulj 如果你的数据集完全保存在容器内部,那么你就有一个深度数据存储问题;你当前的困难只是这个问题的一种症状。我建议你改用一种系统,将你的数据持久化保存在容器外部(例如通过docker卷映射)- 这样你将能够快速轻松地创建和丢弃容器,并获得相应的好处。 - Vince Bowdren
@boyvinall:这里是/entrypoint.sh文件 - 链接 - atulj
@atulj,您能否澄清一下如何挂载数据?即容器外。此外,您是否使用此Docker文件https://github.com/docker-library/mongo/blob/master/3.2/Dockerfile? - Wan B.
@WanBachtiar 现在我已经使用 mongodump 命令将数据导出,并使用 mongorestore 命令将其恢复到主机。然后创建了一个新的 mongo docker(使用 --auth 选项和 /data/db:/data/db 选项进行 docker 卷映射,正如 Vince 建议的那样),并将数据恢复到其中。目前这是唯一的解决方法。但我仍在寻找如何在同一个容器中实现它。 目前我没有使用 Dockerfile。 - atulj
显示剩余8条评论
2个回答

0

可以通过修改容器中的entrypoint.sh来启用身份验证。请尝试以下步骤:

1)docker exec -it yourcontainer bash

2)查找运行中的mongo配置。它可能只是exec mongod。但为了安全起见,请先找到它。

sed -i 's/exec "$@"/echo "new entrypoint $@" > \/tmp\/echo.txt/g' entrypoint.sh

停止并重新启动容器。附加到容器并检查/tmp/echo.txt。

3)在entrypoint.sh中将exec "$@"替换为exec mongod --auth之类的内容。

4)重新启动容器,mongod应该已启用身份验证。

您真的应该考虑将数据存储在卷中而不是容器内部。


-1

我正在使用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 } } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.createUser@src/mongo/shell/db.js:1290:15

希望这能对您有所帮助。


3
如果 Docker 容器被停止,我们如何执行 db.createUser() 命令? - Muhammad Tariq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接