无法将 mongo 实例 运行 作为 Singularity 容器写入
Unable to write to mongo instance running as a Singularity Container
我一直在关注 repo:https://github.com/singularityhub/mongo 使用 Singularity 构建 mongo 容器。
按照存储库中提到的所有步骤操作:
git clone https://www.github.com/singularityhub/mongo
cd mongo
sudo singularity build mongo.sif Singularity
mkdir data/db
singularity run --bind $PWD/data/db:/data/db mongo.sif --auth
我能够成功运行容器。
现在,使用 pymongo 我可以连接到 MongoDB:
的实例
from pymongo import MongoClient
client = MongoClient("mongodb://127.0.0.1:27017")
t = client['temp_db3']
print(client.list_database_names()) ### this returns an empty list
c = t['temp_collection1']
c.insert_one({"data":'123'})
当我尝试向集合中插入一些数据时,出现授权错误:
错误消息:“OperationFailure:未授权 temp_db3 执行命令 { insert:“temp_collection1”,ordered:true,lsid:{ id:UUID(“206a6f86-2465-4740 -a92e-2e36b65c70f4") }, $db: "temp_db3", $readPreference: { mode: "primary" } }, 完整错误: {'ok': 0.0, 'errmsg': 'not authorized on temp_db3 to execute command { insert: "temp_collection1", ordered: true, lsid: { id: UUID("206a6f86-2465-4740-a92e-2e36b65c70f4") }, $db: "temp_db3", $readPreference: { mode: "primary" } }', 'code': 13, 'codeName': 'Unauthorized'}"
我应该怎么做才能写入此 MongoDB 实例的集合 运行ning 作为容器?
看起来 mongod 仍在尝试写入一些未从主机挂载的文件 OS。
“快速”解决方案:使用singularity run --writable-tmpfs ...
向运行ning容器添加一个可写覆盖层。这将允许文件 written/modified 在只读 .sif 上,但一旦进程停止,它们将被丢弃。
“最佳”解决方案:找出正在写入的内容,并将挂载点更新到相关位置。
我建议使用快速解决方案来了解如何实施最佳解决方案。 lsof | grep mongod
一旦它能够 运行 通常应该让你走得很远。
摆脱 --auth 有效(就像@Joe 在评论中建议的那样)。需要确保 data/db 目录具有正确的读写权限。
我一直在关注 repo:https://github.com/singularityhub/mongo 使用 Singularity 构建 mongo 容器。
按照存储库中提到的所有步骤操作:
git clone https://www.github.com/singularityhub/mongo
cd mongo
sudo singularity build mongo.sif Singularity
mkdir data/db
singularity run --bind $PWD/data/db:/data/db mongo.sif --auth
我能够成功运行容器。
现在,使用 pymongo 我可以连接到 MongoDB:
的实例from pymongo import MongoClient
client = MongoClient("mongodb://127.0.0.1:27017")
t = client['temp_db3']
print(client.list_database_names()) ### this returns an empty list
c = t['temp_collection1']
c.insert_one({"data":'123'})
当我尝试向集合中插入一些数据时,出现授权错误:
错误消息:“OperationFailure:未授权 temp_db3 执行命令 { insert:“temp_collection1”,ordered:true,lsid:{ id:UUID(“206a6f86-2465-4740 -a92e-2e36b65c70f4") }, $db: "temp_db3", $readPreference: { mode: "primary" } }, 完整错误: {'ok': 0.0, 'errmsg': 'not authorized on temp_db3 to execute command { insert: "temp_collection1", ordered: true, lsid: { id: UUID("206a6f86-2465-4740-a92e-2e36b65c70f4") }, $db: "temp_db3", $readPreference: { mode: "primary" } }', 'code': 13, 'codeName': 'Unauthorized'}"
我应该怎么做才能写入此 MongoDB 实例的集合 运行ning 作为容器?
看起来 mongod 仍在尝试写入一些未从主机挂载的文件 OS。
“快速”解决方案:使用singularity run --writable-tmpfs ...
向运行ning容器添加一个可写覆盖层。这将允许文件 written/modified 在只读 .sif 上,但一旦进程停止,它们将被丢弃。
“最佳”解决方案:找出正在写入的内容,并将挂载点更新到相关位置。
我建议使用快速解决方案来了解如何实施最佳解决方案。 lsof | grep mongod
一旦它能够 运行 通常应该让你走得很远。
摆脱 --auth 有效(就像@Joe 在评论中建议的那样)。需要确保 data/db 目录具有正确的读写权限。