【问题标题】:How to avoid permission deny with uid/gid 1000 after mount volume with docker?使用 docker 挂载卷后如何避免使用 uid/gid 1000 拒绝权限?
【发布时间】:2016-12-26 10:14:54
【问题描述】:

我正在使用 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码头工人运行命令。我该如何解决?

【问题讨论】:

    标签: mongodb docker


    【解决方案1】:

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

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

    【讨论】:

    • 我已尝试更改主机目录的权限。但它不起作用,卷挂载与主机目录具有相同的 777 权限。我也以root身份运行容器,它应该具有写入容器目录的权限。但是当我运行“ls”或“touch test”之类的命令时,它并没有像我预期的那样工作。
    • 你在主机上chown -R root.root db了吗?你的主人是什么? Linux、Mac 还是 Windows?
    • 我使用的是Fedora 25。我试过chown,它确实将所有者和组更改为root,但是当我尝试写入目录时它仍然输出权限拒绝。
    • 我在目录列表中看到了 selinux 位。尝试禁用它并重新启动以查看是否有改进。如果没有,请使用显示新权限的最新输出更新问题。
    • 我遇到了同样的问题你找到解决办法了吗?
    猜你喜欢
    • 2016-03-30
    • 2020-10-03
    • 1970-01-01
    • 2018-12-29
    • 2019-06-05
    • 2023-03-19
    • 2018-10-17
    • 2019-07-13
    相关资源
    最近更新 更多