Rootless Docker:需要为 docker 容器中的非 root 用户提供对主机上安装的卷的写入访问权限

Dmy*_*hov 6 docker docker-volume rootless

我想为 Docker 容器中的非 root 用户提供对主机上安装的卷的写入访问权限。我在容器和主机内也有相同的非 root 用户和组。

\n

运行容器时,我将主机卷安装到其中-v /some/folder:/some/folder。我这样做是因为我的应用程序在 docker 容器内运行需要将文件写入已安装的主机文件夹。但由于我以非 root 用户身份运行我的应用程序,因此它 \xe2\x80\x99t 无权写入该文件夹。

\n

另外,我已在容器内自动更改此安装的文件夹权限。\n我已将以下用户和组指定为主机上此文件夹的所有者:\n\xe2\x80\x9cnonrootuser1:nonrootgroup1\xe2\x80\x9d

\n

对于“rootful”docker,它工作正常,但如果它在容器内是无根的,它会在用户和组下面显示为该文件夹的所有者:\n\xe2\x80\x9croot:nobody\xe2\x80\ x9d

\n

重现此内容的步骤

\n
    \n
  1. 在主机上添加用户和组
  2. \n
\n
groupadd -g 1015 nonrootgroup1\nuseradd -u 1099 nonrootuser1\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 创建将分配给主机上的 osquery groupadd 的目录:
  2. \n
\n
sudo su\n\nmkdir -p /var/osquery/sock\necho "hello world" > /var/osquery/sock/file.txt\n\nchown root:nonrootgroup1 /var/osquery/sock\nchmod g+s /var/osquery/sock/\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 在主目录中创建 Dockerfile:
  2. \n
\n
FROM alpine:3.14\n\nRUN addgroup -g 1015 -S nonrootgroup1\nRUN adduser -D nonrootuser1 -u 1099\n\nUSER nonrootuser1:nonrootgroup1\n\nCMD ["tail", "-f", "/dev/null"]\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 运行docker容器:
  2. \n
\n
docker run --rm -d --name sample-app -v /var/osquery/sock:/var/osquery/sock $(docker build . -q)\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 检查容器的用户 ID:
  2. \n
\n
dmytro@dmytro:~/dev/sample-image$ docker exec sample-app id\n\nuid=1099(nonrootuser1) gid=1015(nonrootgroup1) groups=1015(nonrootgroup1)\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 检查容器内 /var/osquery/sock 目录的权限:
  2. \n
\n

目录 /var/osquery/sock 被分配给组 \'nobody\' 而不是 \'nonrootgroup1\' 组

\n
dmytro@dmytro:~/dev/sample-image$ docker exec sample-app ls -lah /var/osquery\ntotal 12K\ndrwxr-xr-x    3 root     root        4.0K Dec 28 10:47 .\ndrwxr-xr-x    1 root     root        4.0K Dec 28 10:47 ..\ndrwxr-s---    2 nobody   nobody      4.0K Dec 28 09:34 sock\n
Run Code Online (Sandbox Code Playgroud)\n

主机详细信息如下:

\n
Kernel Version: 5.4.0-135-generic\nOperating System: Ubuntu 20.04.5 LTS\nStorage Driver: overlay2\n
Run Code Online (Sandbox Code Playgroud)\n

请建议。

\n

谢谢!

\n

我尝试在“userns-remap”配置中进行设置daemon.json,但 docker 守护进程不会启动它,因为它缺乏创建权限dockremap用户和组的权限。

\n