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