尽管 uid 一致,但自定义用户无法写入已安装的主机目录

问题描述 投票:0回答:1

我有一个设置自定义

USER
的 docker 映像,并且正在安装一个主机目录,其所有者具有与自定义
USER
相同的用户 ID(如此处建议)。不过,我无法从 docker 镜像写入主机目录。

我在使用预构建的 docker 映像时多次遇到这个问题,但我在这里重现一个最小的示例。

简单

Dockerfile
使用自定义
USER

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 version 27.3.1, build ce12230
,并且我按照官方说明安装了无根docker,最重要的是通过运行
dockerd-rootless-setuptool.sh install

也许问题是由于 rootless docker 重新映射 uid 造成的?

不重复

这个问题不是重复的,因为这是由于自定义用户ID(在图像中)和挂载目录的所有者(在主机上)不匹配造成的。

详情

这是一个完整的脚本,显示了我的情况,还显示了相关的 uid:

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

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

########
# HOST #
########

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
docker permissions docker-volume
1个回答
-2
投票

添加

WORKDIR /host

FROM ubuntu:22.04

RUN useradd -m -s /bin/bash mydockeruser

USER mydockeruser

WORKDIR /host

构建

运行命令

docker build -t my-ubuntu .

运行测试

mkdir -p my-directory

docker run -it \
    -v ./my-directory:/host \
    my-ubuntu \
    touch /host/test.txt
© www.soinside.com 2019 - 2024. All rights reserved.