mongodb - 使用 docker 挂载卷后如何避免 uid/gid 1000 的权限被拒绝?

标签 mongodb docker

我正在使用 Fedora 开发 Docker 版本 1.12.5。

我尝试使用以下命令创建 Mongodb 容器:

sudo docker run -v $PWD/db:/data/db -p 27017:27017 --name db -it username/mongo /bin/bash

这是我启动 mongodb 后的响应:

# mongod
root@32c9349a75b8:/# mongod
2016-12-26T09:59:08.643+0000 I CONTROL  [initandlisten] MongoDB starting : pid=10 port=27017 dbpath=/data/db 64-bit host=32c9349a75b8
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten] db version v3.4.1
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten] git version: 5e103c4f5583e2566a45d740225dc250baacfbd7
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten] modules: none
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten] build environment:
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten]     distmod: ubuntu1604
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten]     distarch: x86_64
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2016-12-26T09:59:08.644+0000 I CONTROL  [initandlisten] options: {}
2016-12-26T09:59:08.646+0000 I STORAGE  [initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
2016-12-26T09:59:08.646+0000 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2016-12-26T09:59:08.646+0000 I NETWORK  [initandlisten] shutdown: going to flush diaglog...
2016-12-26T09:59:08.646+0000 I CONTROL  [initandlisten] now exiting
2016-12-26T09:59:08.646+0000 I CONTROL  [initandlisten] shutting down with code:100

我检查了/data/db的文件权限:

root@32c9349a75b8:/data# ls -al 
total 4
drwxr-xr-x.  3 root root   16 Dec 26 03:15 .
drwxr-xr-x. 23 root root  266 Dec 26 09:59 ..
drwxrwxr-x.  2 1000 1000 4096 Dec 25 16:24 db

如果我只是使用 mkdir 创建目录而不用卷挂载它,那么“/db”的所有者和组将是 root,我不明白为什么只有在我尝试使用 -v 后 uid 和 gid 才为 1000 docker 运行命令。我该如何修复它?

最佳答案

卷挂载的权限是你做主机卷的目录web的权限(到主机上的目录)。修复主机本身对此文件夹的权限可以解决该问题。

最好,您可以使用命名卷而不是主机目录。 Docker 将维护卷和初始内容,并且将从具有此类卷的镜像中复制包含的权限。

关于mongodb - 使用 docker 挂载卷后如何避免 uid/gid 1000 的权限被拒绝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41329659/

相关文章:

javascript - 填充嵌套引用 mongoosejs 的更好方法

java - 无法读取 Java 中 JSON 文件的第一行

bash - Makefile 和 docker 附加。如何从其他Makefile的任务中执行?

docker推送到私有(private)注册表挂起

sockets - MongoDB - 套接字 :/tmp/mongodb-27017. socks 的权限被拒绝

mongodb - 在 J=1 和 W=Majority 的 MongoDB 副本集上是否仍然可以回滚?

docker - gcloud docker push 挂起

docker - 配置Docker容器以通过端口无法按预期方式接收消息

git - 是否可以将 scp/git 从我的本地机器推送到托管在 AWS 中的 docker 容器?

java - MongoTemplate 实体模型上的 @Version 注解