我的码头组成:
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,那就没问题了。
答案 0 :(得分:1)
只有sudo组的根或成员才能更改文件/目录的所有权。当你在docker中运行mongodb并从主机附加一个卷时,mongo正试图以mongod用户身份运行。由于此用户不存在于您的主机上并且root拥有卷mongod / docker正在尝试拥有操作系统,因此将此视为权限问题,您将看到该错误。您有几个选择:
将mongo配置为以root身份运行,方法是编辑mongo配置并在docker构建过程中复制它。这假设您使用docker文件来构建该图像。然后访问附加的卷没有问题。
创建一个mongod用户&主机上的组,并将数据目录的所有权更改为操作系统认为所有权/权限没有区别的用户。
重新架构您的系统,以便mongo可以使用默认的容器数据存储大小,并完全放弃卷装载。
答案 1 :(得分:0)
我在CentOS中遇到过这个问题,解决方法是打开SELinux:
setenforce 0
这不是一个mongo问题。实际上这是一个码头工人的问题。当docker想要映射卷时,它会尝试更改权限,而对于user / group / selinux限制则失败。
<强>更新强>
entrypoint.sh中有一个chown命令,它试图更改映射卷中目录和文件的权限。在here中阅读更多内容。