运行docker时mongo的权限错误

时间:2017-06-27 13:43:22

标签: mongodb docker docker-compose

我的码头组成:

version: "2"
services:
 api:
    build: .
    ports:
      - "3007:3007"
    links:
      - mongo
    volumes:
      - .:/opt/app
  mongo:
    image: mongo
    volumes:
      - /data/db:/data/db
    ports:
      - "27017:27017"

我得到了许可错误:

mongo_1          | chown: changing ownership of '/data/db/diagnostic.data/metrics.2017-06-27T13-32-30Z-00000': Operation not permitted
mongo_1          | chown: changing ownership of '/data/db/journal/WiredTigerLog.0000000054': Operation not permitted
mongo_1          | chown: changing ownership of '/data/db/journal/WiredTigerPreplog.0000000001': Operation not permitted
mongo_1          | chown: changing ownership of '/data/db/journal/WiredTigerPreplog.0000000002': Operation not permitted
mongo_1          | chown: changing ownership of '/data/db/WiredTiger.turtle': Operation not permitted
mongo_1          | chown: changing ownership of '/data/db/WiredTigerLAS.wt': Operation not permitted

ls-la on data:

ls -la data
total 0
drwxrwxrwx    3 root  wheel   102 Dec  1  2016 .
drwxr-xr-x   35 root  wheel  1258 Jun 25 04:29 ..
drwxrwxrwx@ 118 root  wheel  4012 Jun 27 15:33 db

如果我手动更改/data/db的权限,则会将其更改回来。

这是什么问题?如果我在本地运行mongo,那就没问题了。

2 个答案:

答案 0 :(得分:1)

只有sudo组的根或成员才能更改文件/目录的所有权。当你在docker中运行mongodb并从主机附加一个卷时,mongo正试图以mongod用户身份运行。由于此用户不存在于您的主机上并且root拥有卷mongod / docker正在尝试拥有操作系统,因此将此视为权限问题,您将看到该错误。您有几个选择:

  1. 将mongo配置为以root身份运行,方法是编辑mongo配置并在docker构建过程中复制它。这假设您使用docker文件来构建该图像。然后访问附加的卷没有问题。

  2. 创建一个mongod用户&主机上的组,并将数据目录的所有权更改为操作系统认为所有权/权限没有区别的用户。

  3. 重新架构您的系统,以便mongo可以使用默认的容器数据存储大小,并完全放弃卷装载。

答案 1 :(得分:0)

我在CentOS中遇到过这个问题,解决方法是打开SELinux:

setenforce 0

这不是一个mongo问题。实际上这是一个码头工人的问题。当docker想要映射卷时,它会尝试更改权限,而对于user / group / selinux限制则失败。

<强>更新

entrypoint.sh中有一个chown命令,它试图更改映射卷中目录和文件的权限。在here中阅读更多内容。