Joe*_*Joe 5 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"
Run Code Online (Sandbox Code Playgroud)
我得到权限错误:
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
Run Code Online (Sandbox Code Playgroud)
ls-la 关于数据:
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
Run Code Online (Sandbox Code Playgroud)
如果我手动更改 的权限/data/db,它将被更改回来。
这里有什么问题?如果我在本地运行 mongo 没有问题。
我在 CentOS 中遇到了这个问题,解决方案是打开 SELinux:
setenforce 0
Run Code Online (Sandbox Code Playgroud)
这不是蒙戈问题。这实际上是一个 docker 问题。当 docker 想要映射卷时,它会尝试更改权限,但未能对用户/组/selinux 限制进行操作。
更新:
entrypoint.sh 中有一个 chown 命令,它尝试更改映射卷中目录和文件的权限。在这里阅读更多。
只有 root 或 sudo 组的成员才能更改文件/目录的所有权。当您在 docker 中运行 mongodb 并从主机附加卷时,mongo 会尝试以 mongod 用户身份运行。由于该用户在您的主机上不存在,并且 root 拥有该卷,因此 mongod/docker 试图拥有该卷,因此操作系统将其视为权限问题,您将看到该错误。您有几个选择:
通过编辑 mongo 配置并在 docker 构建过程中复制它,将 mongo 配置为以 root 身份运行。这假设您使用 docker 文件来构建该映像。然后访问附加卷就不会出现问题。
在主机上创建一个 mongod 用户和组,并将数据目录的所有权更改为该用户,操作系统在所有权/权限方面没有区别。
重新架构您的系统,以便 mongo 可以在其生命周期中使用默认的容器数据存储大小,并完全放弃卷安装。
| 归档时间: |
|
| 查看次数: |
5765 次 |
| 最近记录: |