这个时候有一个问题,config 在宿主机,属于 root ,挂载到容器 alpine 内后,还是显示属于 root 。 导致容器 alpine 内部,普通用户 alpine ,对于挂载文件夹没有权限做操作。
https://github.com/moby/moby/issues/3124
应用场景:docker 容器是 aria2 ,挂载本地文件夹,用作下载文件夹。
这种问题,通常怎么解决。
1
skydirewolf 3 天前
试试加 --privileged=true
|
2
sn0wdr1am OP @skydirewolf 这个选项看起来简单粗暴,但是我一般能不加就不加。
|
3
sn0wdr1am OP 有一个方案,就是:宿主机上的文件夹(将要挂载到容器内部),在宿主机上设置 777.
|
4
caola 3 天前
容器内也使用 root 用户不就行了,感觉容器内不是那么必要使用非 root
|
5
hingle 3 天前
宿主机都用 root 了,直接把挂载的目录和文件 uid 改成容器一样就好了。
|
7
ysc3839 3 天前 via Android
是比较麻烦,内外都是按 UID 进行区分的,一般建议要不然都 root ,要不然 UID 保持一致,比如都用 1000 ,一些特殊场景比如 www-data/http 的都用 33 。
|
8
skvi 3 天前 via Android
目标文件在宿主机直接改成容器内用户的 uid:gid 就好了
|
9
superhot 3 天前
我也遇到了这个问题,不过更复杂一些,是 VSCode DevContainer on WSL2 & macOS:
https://tanronggui.xyz/t/1105180 好像没什么好办法,macOS 上对所有权的限制宽松一些,WSL2 更严格。现在老老实实用 volume 了。 |
10
sn0wdr1am OP 一个不太完美的解决方案:
加一个小尾巴,修改挂载文件夹的归属。(可能会改变宿主机被挂载文件夹的 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 ``` |
11
sn0wdr1am OP |
12
xiao17 3 天前
容器也用 root 可以吗?我遇到的容器都是 root
|
13
bluedawn 2 天前
你看一下容器内 alpine 用户的 uid 和 gid 是多少
在宿主文件夹 chown 一下不就好了 反正宿主是 root 是多少都能访问 |
15
y1y1 2 天前 via iPhone
把目录删了再 run
|