标签: rootless

Rootless 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 测试

  4. 通过 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 …
Run Code Online (Sandbox Code Playgroud)

file-permissions docker docker-volume rootless

8
推荐指数
1
解决办法
2043
查看次数

以无根模式在docker中挂载NFS共享

我正在尝试在 docker 容器中挂载 NFS 共享,但我无法这样做,因为在 rootlesskit 下运行的容器没有在主机上使用升级权限的权限。

有没有办法使用 rootlesskit 挂载共享或以某种方式修改 rootlesskit?

containers nfs root docker rootless

6
推荐指数
0
解决办法
420
查看次数

如何启用非 docker 操作来访问我的自托管 github 操作运行器上 docker 创建的文件?(无根码头工人)

Github 建议以非 root 用户身份运行运行程序,这会引起一些有关混合 docker 和非 docker 操作的问题。这非常烦人,因为它导致签出操作无法运行,因为它无法访问在 docker 容器中运行的操作创建的文件。

可以通过使用 rootless docker 运行 actions runner 来解决这个问题吗?

containers github docker github-actions rootless

6
推荐指数
1
解决办法
2026
查看次数

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

我想为 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)

docker docker-volume rootless

6
推荐指数
0
解决办法
497
查看次数

ubuntu 上的 docker rootless-overlay2 失败:不支持驱动程序

虽然我只需按照主站点上的说明就可以在 Ubuntu 19.10 上运行无根 docker 容器,但它只持续了一天。

\n\n

https://docs.docker.com/engine/security/rootless/

\n\n

重启机器后,docker守护进程再也无法工作

\n\n
systemctl --user status docker\n\xe2\x97\x8f docker.service - Docker Application Container Engine (Rootless)\n   Loaded: loaded (/home/ice/.config/systemd/user/docker.service; disabled; vendor preset: enabled)\n   Active: failed (Result: exit-code) since Mon 2020-03-02 11:29:40 GMT; 2h 28min ago\n     Docs: https://docs.docker.com\n  Process: 1389 ExecStart=/home/ice/bin/dockerd-rootless.sh --experimental --storage-driver=overlay2 (code=exited, status=1/FAILURE)\n Main PID: 1389 (code=exited, status=1/FAILURE)\n\nMar 02 11:29:40 fractal systemd[8403]: docker.service: Service RestartSec=10s expired, scheduling restart.\nMar 02 11:29:40 fractal systemd[8403]: docker.service: Scheduled restart job, restart counter is at 3.\nMar 02 11:29:40 …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu docker rootless

5
推荐指数
1
解决办法
4327
查看次数

尝试将无根 Podman + docker-compose + Traefik 与 podman.sock 一起使用时权限被拒绝

TL:DR:尝试通过 podman 套接字将无根 Podman 与 docker-compose 结合使用,并使用 Traefik 容器(与 podman 套接字通信)将流量代理到其他容器,与/sf/answers/5164202921/相关

我收到权限被拒绝的错误,我可以使用我不想使用的特权容器来修复该错误。

设置

我在 RHEL 8 上运行

$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.6 (Ootpa)
Run Code Online (Sandbox Code Playgroud)

Podman 是预安装的,我添加了 docker-compose(“独立”)和 podman-docker:

$ curl -SL https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
$ chmod a+x /usr/local/bin/docker-compose
$ sudo yum install podman-docker
Run Code Online (Sandbox Code Playgroud)

并激活 rootless podman 套接字,以便 podman 和 docker-compose 可以相互通信:

$ systemctl --user enable podman.socket
$ systemctl --user start podman.socket
$ systemctl --user status podman.socket
$ export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
$ echo $DOCKER_HOST
unix:///run/user/1001/podman/podman.sock
Run Code Online (Sandbox Code Playgroud)

我还将网络后端切换为 netavark,如果不进行更改,DNS 就无法工作 …

docker-compose traefik podman rootless

5
推荐指数
1
解决办法
2万
查看次数

如何更改 Docker Rootless 的数据目录?

Docker 官方文档网站上有关无根数据目录的唯一信息是:

数据目录默认设置为 ~/.local/share/docker。数据目录不应位于 NFS 上。

但是,我在安装过程中没有找到任何选项可以通过dockerd-rootless-setuptool.sh install更改此设置

更改非 root 用户(无根模式)上 Docker 的默认数据目录。

docker rootless

5
推荐指数
1
解决办法
833
查看次数

如何:Podman rootless 将容器端口暴露给外部并查看真实的客户端 IP

这是我第一次在 stackoverflow 上问问题。我已经潜伏多年,但现在我终于决定自己注册。因此,如果我的问题/信息格式不正确,我深表歉意。

现在的情况:

我慢慢地越来越熟悉 Podman,并且正在将一些容器从 docker(有根)转移到 podman(无根)。我在Debian 11上使用Podman 4.3.1。我已经设法让一些容器正常工作并且能够从外部连接到它们。但是,容器显示客户端/源 IP“127.0.0.1”,而不是我真实客户端的 IPv4。我想知道下面这样的事情是否可能?

理想情况:

为容器分配特定的 IPv4(无根)。使用 nftables/iptables 将数据包从主机网络转发到容器 ipv4(例如 192.168.1.12)。能够在容器中看到真实客户端的 IPv4,仍然能够使用fail2ban 等。

正如您可能注意到的,我仍然处于学习容器化如何工作的过程中,特别是对于网络而言。出于安全原因,我不想将主机网络用于我的容器。如果有不清楚的地方请告诉我,我会尽力更好地解释自己。

感谢您花时间阅读本文:)

networking debian nftables podman rootless

4
推荐指数
1
解决办法
6527
查看次数

Docker rootless无法拉取镜像

我正在服务器上运行 docker rootless,遵循https://docs.docker.com/engine/security/rootless/

这样我就可以拉取并运行 hello-world 了。但每当我想要提取更复杂的图像时,我都会遇到以下错误:

$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
83ee3a23efb7: Extracting [==================================================>]  28.57MB/28.57MB
db98fc6f11f0: Download complete 
f611acd52c6c: Download complete 
failed to register layer: ApplyLayer exit status 1 stdout:  stderr: lchown /etc/gshadow: operation not permitted
Run Code Online (Sandbox Code Playgroud)

输出来自docker info

$ docker info
Client:
 Context:    default
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 1
 Server Version: 20.10.2
 Storage Driver: vfs
 Logging Driver: json-file
 Cgroup Driver: …
Run Code Online (Sandbox Code Playgroud)

linux bash docker rootless

3
推荐指数
1
解决办法
2580
查看次数

防止使用无根容器更改安装中的权限

在有根容器中,此问题的解决方案是运行--user "$(id -u):$(id -g)",但这不适用于无根包含系统(无根 docker,或在我的情况下为 podman):

$ mkdir x
$ podman run --user "$(id -u):$(id -g)" -v "$PWD/x:/x:rw" ubuntu:focal bash -c 'echo hi >> /x/test'
bash: /x/test: Permission denied
Run Code Online (Sandbox Code Playgroud)

因此,对于无根容器系统,我应该删除--user,因为根用户会自动映射到调用用户:

$ podman run -v "$PWD/x:/x:rw" ubuntu:focal bash -c 'echo hi >> /x/test'
$ ls -al x
total 12
drwxr-xr-x  2 asottile asottile 4096 Sep  3 10:02 .
drwxrwxrwt 18 root     root     4096 Sep  3 10:01 ..
-rw-r--r--  1 asottile asottile    3 Sep  3 10:02 test …
Run Code Online (Sandbox Code Playgroud)

docker podman rootless

1
推荐指数
1
解决办法
2696
查看次数