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
相关产品推荐
相关产品推荐

