You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rootless Docker模式下如何从宿主机访问Docker volume内的文件?

非Root模式Docker卷权限问题解决方案

问题根因

你遇到的权限问题核心是容器内部运行进程的UID/GID与宿主机docker用户的UID/GID不匹配:容器挂载卷后,会自动把卷内目录的属主修改为容器内部运行用户的UID(你场景里的165605),而默认权限仅开放给属主用户,所以宿主机的docker用户没有访问权限。

可选用的解决方案

  • 方案1:启动容器时指定运行用户为docker用户(优先推荐,无额外配置)

    先在宿主机执行以下命令查询docker用户的UID和GID:
    id -u docker # 输出docker用户UID
    id -g docker # 输出docker用户GID
    
    假设查询到的UID/GID为1000:1000,创建容器时增加--user参数指定运行用户即可:
    docker run -d -v test:/etc/myapp/directory --user 1000:1000 你的镜像名
    
    这种方式容器内部进程会以指定UID运行,卷的属主会自动设置为对应ID,宿主机docker用户可直接访问卷内容,不影响容器运行。
  • 方案2:保留容器原有运行用户,通过ACL授权docker用户访问

    如果镜像预设了必须用165605这个UID运行无法修改,可以用ACL给docker用户单独加访问权限,不需要改动原有文件属主:
    # 给对应卷的_data目录加docker用户的读写执行权限,递归所有子文件加-R参数
    sudo setfacl -R -m u:docker:rwx /home/docker/.local/share/docker/volumes/test/_data
    # 如果是绑定挂载的场景,替换为你的宿主机挂载目录即可
    sudo setfacl -R -m u:docker:rwx /home/docker/mydirectory
    
  • 方案3:针对绑定挂载场景开放组权限

    你最初的绑定挂载目录属组已经是docker组,仅需开放组权限即可访问:
    sudo chmod -R g+rwx /home/docker/mydirectory
    

注意事项

  • 执行涉及sudo的权限修改命令时,需要有宿主机的sudo权限
  • 用ACL授权的方式不会影响容器内部的原有权限配置,兼容性更高

内容的提问来源于stack exchange,提问作者R2Bleep2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:36:07