Mongodb 如何避免在使用docker装载卷后使用uid/gid 1000拒绝权限?

Mongodb 如何避免在使用docker装载卷后使用uid/gid 1000拒绝权限?,mongodb,docker,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

我正在使用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,我不知道为什么uid和gid只有在使用docker run命令尝试-v之后才是1000。如何修复它?

卷装载的权限是您对主机卷(主机上的目录)执行的目录web的权限。修复主机上此文件夹的权限可以解决此问题


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

我已尝试更改host dir的权限。但它不起作用,卷装载与主机目录具有相同的777权限。我还以root用户身份运行容器,它应该具有在容器的dir中写入的权限。但是当我运行诸如“ls”或“touch test”之类的命令时,它并没有像我预期的那样工作。您是否在主机上运行了
chown-R root.root db
?你的主人是什么?Linux、Mac还是Windows?我正在使用Fedora25。我尝试了chown,它确实将所有者和组更改为root,但是当我尝试写入dir时,它仍然输出permission deny。尝试禁用它并重新启动,看看是否有改进。如果没有,请使用显示新权限的最新输出更新问题。我面临的问题与此相同。您找到解决方法了吗?