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

UID一致时自定义用户仍无法写入Docker挂载的主机目录

自定义UID用户的Docker镜像无法写入主机挂载目录(Rootless Docker环境)

我构建了一个包含自定义USER的Docker镜像,主机挂载目录的所有者UID和镜像内自定义用户的UID完全一致,但镜像内依然无法写入该目录。以下是最小复现示例及详细验证信息:

最小复现示例

Dockerfile内容

FROM ubuntu:22.04

RUN useradd -m -s /bin/bash mydockeruser

USER mydockeruser

主机执行命令及报错

docker run -it \
    -v ./my-directory:/host \
    my-ubuntu \
    touch /host/test.txt

# 报错:touch: cannot touch '/host/test.txt': Permission denied

环境信息

  • 系统:Ubuntu 20.04.6 LTS
  • Docker版本:27.3.1, build ce12230
  • 部署方式:Rootless Docker,通过执行dockerd-rootless-setuptool.sh install完成配置

怀疑问题出在Rootless Docker的UID映射机制上。

问题特殊性说明

此前有类似问题是因为镜像内用户UID和主机目录所有者UID不匹配,但本次两者UID完全一致,不属于该情况。

详细验证信息

以下是完整验证脚本及输出,确认UID匹配情况:

echo "Building my-ubuntu:"
docker build -t my-ubuntu .

# 输出:[+] Building 0.6s (6/6) FINISHED
# [...]

########
# 主机侧信息 #
########

rm -rf my-directory
mkdir my-directory

echo "$ ls -la my-directory:"
ls -la my-directory

# 输出:
# total 8
# drwxrwxr-x 2 myhostuser myhostuser 4096 Oct  7 15:01 .
# drwxrwxr-x 3 myhostuser myhostuser 4096 Oct  7 15:01 ..

echo "$ id:"
id

# 输出:uid=1000(myhostuser) gid=1000(myhostuser) groups=1000(myhostuser),[...]

##########
# Docker容器内信息 #
##########

echo "$ id (inside my-ubuntu):"
docker run -it \
    -v ./my-directory:/host \
    my-ubuntu \
    id

# 输出:uid=1000(mydockeruser) gid=1000(mydockeruser) groups=1000(mydockeruser)

echo "$ touch /host/test.txt (inside my-ubuntu):"
docker run -it \
    -v ./my-directory:/host \
    my-ubuntu \
    touch /host/test.txt

# 输出:touch: cannot touch '/host/test.txt': Permission denied

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:07