如何赋予 docker 容器 write/chmod 对映射卷的权限?

How to give docker container write/chmod permissions on mapped volume?

我有一台支持 docker 的 synology NAS,我想在上面 运行 一些 docker 容器(我对 Docker 还很陌生)。例如 pocketmine-pm(但我相信我也有其他容器的写入问题)。

我在主机上创建了一个卷并将其映射到容器设置中。 (在 synology docker 卷映射设置中我没有点击 "read only")。

根据 Docker 文件,在容器内创建了一个新用户 'pocketmine',该用户用于启动服务器。用户似乎拥有用户 ID 1000(新 linux 用户的第一个 UID)。该容器还使用 Entrypoint.sh 脚本来启动服务器。

最初容器无法将文件写入映射目录。我必须通过 SSH 进入主机 'chown' UID 1000 的目录:

sudo chown 1000:1000 /volXy/docker/pocketminemp -R

之后就可以下载并提取存档了。

很遗憾,我无法从我的 iOS 设备连接到服务器。服务器列为 'online' 但连接失败,没有任何特定消息。然后我检查了容器的日志并看到了以下条目(不确定这是否真的阻止了连接但我会试一试):

[*] Everything done! Run ./start.sh to start PocketMine-MP
chown: changing ownership of '/pocketmine/entrypoint.sh': Operation not permitted
chown: changing ownership of '/pocketmine/server.properties.original': Operation not permitted
Loading pocketmine.yml...

显然容器无法 chown 之前能够下载的文件。

有人知道如何解决这个问题吗?我是否需要 chmod 映射卷以及为什么我需要 chown UID 1000 的目录(主机上并不真正存在的用户)- 没有更优雅的方法吗修复权限?

当您 运行 容器时,您应该能够使用 --user="uid:gid" 标志来指定您希望将容器作为 运行 的用户。

来源:https://docs.docker.com/engine/reference/run/#user