docker 使用 nfs/smb volume 权限问题

2023-02-12 18:27:05 +08:00
 mrleft

all-in-one(boom) docker 和 群晖是两个虚拟机( PVE )

两台的用户分别是
dockermachine

> id
uid=1000(ubuntuuser) gid=1000(ubuntuuser) groups=1000(ubuntuuser),27(sudo),999(docker)

dsm

> id
uid=1026(dsmuser) gid=100(users) groups=100(users),101(administrators)

docker-compose.yml

version: "3.2"
services:
  heimdall:
    image: lscr.io/linuxserver/heimdall:latest
    container_name: heimdall
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - type: volume
        source: nfs
        target: /config
        volume:
          nocopy: true
    ports:
      - 80:80
      - 443:443
    restart: unless-stopped
volumes:
  nfs:
    driver_opts:
      type: "nfs"
      o: "addr=dsmip,nolock,soft,rw,nfsvers=4"
      device: ":/pathtoheimdall"

heimdall 报权限不对, 请问 docker 使用 nfs/smb volume 时权限怎么处理

1143 次点击
所在节点    问与答
3 条回复
ksc010
2023-02-12 19:14:07 +08:00
你把 nfs 上的文件夹挂在到 docker 下,文件的 owner uid 是不变的,
所以你需要看下 容器中应用的那个用户启动的程序,并且它的 uid 是多少,然后看下 nsf 上文件的 uid 是多少,要一致,这样就可以了
piku
2023-02-12 19:43:50 +08:00
1.群晖开 NFS 授权给容器主机,容器主机挂 NFS ,目录映射给容器。这种情况下目录权限由群晖决定,容器改不了文件权限(可能会出警告)但读写都正常。
2. smb 就麻烦了,群晖端既要设目录权限也要设 ACL 权限(也可能没开 ACL 功能)。容器可以直接挂 smb 给目录,也可以把 smb 挂到容器主机再映射给容器目录。这种情况下需要注意挂载时指定权限( mount -o )。
大部分情形下不需要留意用户权限,这种挂载的情况给 777 即可。不能给 777 的情况下还需要考虑用户映射
julyclyde
2023-02-13 09:16:28 +08:00
nfs 其实没有授权,只是接受对应的 uid 和 mode
所以服务器端要求客户端的 IP 、客户端要求 root 才能 mount

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

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

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

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

© 2021 V2EX