求教一个 Docker 挂载文件夹的权限问题

227 天前
 sn0wdr1am
  1. 宿主机假设是 ubuntu ,用户 root
  2. docker 容器假设是 alpine ,用户 alpine
  3. 假设一个宿主文件夹 config ,要挂载到容器 alpine 内部。

这个时候有一个问题,config 在宿主机,属于 root ,挂载到容器 alpine 内后,还是显示属于 root 。 导致容器 alpine 内部,普通用户 alpine ,对于挂载文件夹没有权限做操作。

https://github.com/moby/moby/issues/3124

应用场景:docker 容器是 aria2 ,挂载本地文件夹,用作下载文件夹。

这种问题,通常怎么解决。

1659 次点击
所在节点    Docker
15 条回复
skydirewolf
227 天前
试试加 --privileged=true
sn0wdr1am
227 天前
@skydirewolf 这个选项看起来简单粗暴,但是我一般能不加就不加。
sn0wdr1am
227 天前
有一个方案,就是:宿主机上的文件夹(将要挂载到容器内部),在宿主机上设置 777.
caola
227 天前
容器内也使用 root 用户不就行了,感觉容器内不是那么必要使用非 root
hingle
227 天前
宿主机都用 root 了,直接把挂载的目录和文件 uid 改成容器一样就好了。
sn0wdr1am
227 天前
@caola 以前一直这么干,所以没发现有这个问题。但是我看别人都建议不用 root 。
ysc3839
227 天前
是比较麻烦,内外都是按 UID 进行区分的,一般建议要不然都 root ,要不然 UID 保持一致,比如都用 1000 ,一些特殊场景比如 www-data/http 的都用 33 。
skvi
227 天前
目标文件在宿主机直接改成容器内用户的 uid:gid 就好了
superhot
227 天前
我也遇到了这个问题,不过更复杂一些,是 VSCode DevContainer on WSL2 & macOS:
https://www.v2ex.com/t/1105180
好像没什么好办法,macOS 上对所有权的限制宽松一些,WSL2 更严格。现在老老实实用 volume 了。
sn0wdr1am
227 天前
一个不太完美的解决方案:

加一个小尾巴,修改挂载文件夹的归属。(可能会改变宿主机被挂载文件夹的 uid ,gid )。
chown -Rv transmission:transmission /var/lib/transmission

```
docker run -d \
--name=transmission \
-u 1000:1000 \
-e TZ=Etc/UTC \
-e RPC_USER=admin \
-e RPC_PASS=admin \
-e RPC_PORT=9091 \
-e PEER_PORT=51413 \
-p 9091:9091 \
-p 51413:51413 \
-p 51413:51413/udp \
-v ./config:/var/lib/transmission/config \
-v ./downloads:/var/lib/transmission/downloads \
-v ./incomplete:/var/lib/transmission/incomplete \
-v ./torrents:/var/lib/transmission/torrents \
--restart unless-stopped \
dev/tr:alpine chown -Rv transmission:transmission /var/lib/transmission
```
sn0wdr1am
227 天前
Linux 系统里 Docker 容器挂载目录导致的权限问题

https://www.yangdx.com/2020/06/160.html


看起来这两种方法都可以,都不算完美。
xiao17
227 天前
容器也用 root 可以吗?我遇到的容器都是 root
bluedawn
227 天前
你看一下容器内 alpine 用户的 uid 和 gid 是多少
在宿主文件夹 chown 一下不就好了
反正宿主是 root 是多少都能访问
sn0wdr1am
227 天前
@bluedawn 是的。容器内外主要对准 uid ,gid ,使用 chown 可以同步,就是麻烦一点。
y1y1
227 天前
把目录删了再 run

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1106263

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX