无根 Docker:在没有 sudo 的情况下将文件写入卷挂载时权限被拒绝

问题描述

我无法在没有 sudo 权限的情况下(通过 ssh)在我的容器中写入已安装的卷。挂载的文件夹是主机用户在主机上的主文件夹。我正在运行一个无根 docker 守护进程。

我做了以下步骤来启动一个容器:

  1. 我已经按照 https://docs.docker.com/engine/security/rootless/ 上的说明设置了一个无根 docker

  2. 使用以下命令构建 Dockerfile(如下):

    docker build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g) --build-arg USER_NAME=user--build-arg USER_PASS=user -t test .

  3. 使用以下命令启动容器:

    docker run -d --name test_container -p 50000:22 -v /home/$(id -u -n):/mnt/home test

  4. 通过 SSH 进入我的容器

    ssh user@localhost -p 50000

当我在主目录中创建文件时,我的权限被拒绝。当我在主机中创建一个文件夹并将其 chmod 为 777 时;然后我就可以创建文件,但它们没有出现在我的原始主机中,具有正确的用户/组,相反,我得到了类似的东西:

drwxrwxrwx  6 gdekkers gdekkers 4096 May 25 21:10 .
drwxr-xr-x 14 gdekkers gdekkers 4096 May 25 21:10 ..
drwxrwxrwx  3 gdekkers gdekkers 4096 Apr 30 13:01 SomeFolder
drwxr-xr-x  2   100999   100999 4096 May 25 21:08 test
drwxr-xr-x  2   100999   100999 4096 May 25 21:10 test2

这很不方便,因为我需要定期应用 chown。它似乎与无根 Docker 使用的命名空间有关。如何确保创建的文件与主机上的用户匹配?

Dockerfile:

FROM nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04

# Input arguments
ARG USER_ID
ARG GROUP_ID
ARG USER_NAME
ARG USER_PASS

# environment variables
ARG DEBIAN_FRONTEND="noninteractive"
ENV TZ Europe/Belgium

# Install some basic utilities and clean up
RUN apt-get update && apt-get install -y \
    nano \
    ca-certificates \
    sudo \
    libx11-6 \
    openssh-server \
 && rm -rf /var/lib/apt/lists/*

# Create a sudo user
RUN groupadd --gid $GROUP_ID user
RUN useradd -rm -d /home/$USER_NAME -s /bin/bash --uid $USER_ID --gid $GROUP_ID -G sudo $USER_NAME
RUN usermod -aG sudo $USER_NAME
RUN echo $USER_NAME:$USER_PASS | chpasswd

# Start ssh service
RUN service ssh start
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)