Ger*_*ers 8 file-permissions docker docker-volume rootless
如果没有 sudo 权限,我无法在容器中(通过 ssh)写入已安装的卷。挂载的文件夹是主机用户在主机上的主文件夹。我正在运行一个无根的 docker 守护进程。
我执行了以下步骤来启动容器:
我已经按照https://docs.docker.com/engine/security/rootless/上的说明设置了一个无根 docker
使用以下命令构建 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 。
使用以下命令启动容器:
docker run -d --name test_container -p 50000:22 -v /home/$(id -u -n):/mnt/home 测试
通过 SSH 连接到我的容器
ssh 用户@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
Run Code Online (Sandbox Code Playgroud)
这很不方便,因为我需要定期应用 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"]
Run Code Online (Sandbox Code Playgroud)
谢谢!
我最近在做自己的项目时遇到了这样的问题。这是由于无根使用 Docker 时 UID/GID 映射不同造成的。
我最近在博客上写了一篇文章,详细介绍了如何处理无根 Docker 问题,例如这些“权限被拒绝”问题。主机上的继承 ACL 是一个可行的解决方案(正如StackOverflow 线程中也提到的):
acl如果您尚未安装该软件包,请先安装该软件包:Run Code Online (Sandbox Code Playgroud)sudo apt install acl然后,让我们始终允许用户 访问当前和将来的文件的
rwX权限:./dataubuntuRun Code Online (Sandbox Code Playgroud)sudo setfacl -Rm d:u:ubuntu:rwX,u:ubuntu:rwX ./data
(上面的示例假设 Docker 绑定挂载是 的子项./data)
| 归档时间: |
|
| 查看次数: |
2043 次 |
| 最近记录: |