问题标签 [rootless]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
docker - Rootless Docker:在没有 sudo 的情况下将文件写入卷挂载时权限被拒绝
在我的容器中(通过 ssh)没有 sudo 权限时,我无法写入已安装的卷。挂载的文件夹是主机用户的主文件夹。我正在运行一个无根 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 test
通过 SSH 进入我的容器
ssh 用户@localhost -p 50000
当我在我的主目录中创建一个文件时,我得到一个权限被拒绝。当我在主机中创建一个新文件夹并将其更改为 777 时;然后我可以创建文件,但它们没有出现在具有正确用户/组的原始主机中,而是我得到类似的东西:
这很不方便,因为我需要定期申请 chown。它似乎与无根 Docker 使用的命名空间有关。如何确保创建的文件与主机上的用户匹配?
Dockerfile:
谢谢!
docker - 在哪里使用无根 docker 添加证书
我有一些私人 docker 注册表,我添加了他们的证书/etc/docker/certs.d/[domain.name.com]/ca.crt
并且它正在工作,但我的问题是我必须使用 sudo 和 docker,即使我在 docker 组中并重新启动(多次尝试)。
所以我尝试了无根 docker 但现在似乎我无法再连接到我的注册表,我遇到了这个错误:Error response from daemon: Get https://domain.name.com/v2/: x509: certificate signed by unknown authority
我在我的文件夹下的 certs.d 中添加了相同的文件/home/$USER/.docker/certs.d/...
夹,但它也不起作用。
您知道与 rootless docker 的证书是否有关吗?
非常感谢您的回答
docker - dockremap rootless:如何不使用 subid 而是使用特定用途
我遇到了以下问题:当我使用预烘焙图像并"userns-remap": "default"
在daemon.json
docker 文件中指定选项时,它使所有内容都无根但具有子用户 ID,例如:
与 GUID 相同。但是为了文件权限管理和方便,我想在一些特定的真实用户下运行它而不重新映射。你能告诉我有哪些可能的挖掘方式吗?
docker - 从无根 Docker 容器访问 USB 蓝牙加密狗
如此处所述设置无根 Docker 后,我尝试从容器内部使用蓝牙 USB 加密狗。我确认加密狗在主机上工作并且我可以hcitool -i hci0 lescan
成功运行(使用 root 用户)。从互联网上的众多帖子中,似乎必须使用以下选项的组合启动容器:
--net=host
--privileged
- 有能力
NET_ADMIN
- 有能力
NET_RAW
- 有能力
SYS_ADMIN
请注意,我使用的是 Portainer,但使用的等效 CLI 命令是docker run -ti --privileged --net=host --cap-add=NET_ADMIN --cap-add=NET_RAW --cap-add=SYS_ADMIN ubuntu:latest --name bletest /bin/bash
. 因此,我使用所有这些选项启动了容器 - 但是,尝试访问设备时出现以下错误:
-v /var/lib/bluetooth -v /sys/fs/cgroup:/sys/fs/cgroup:ro
从这里开始运行:
最后一个命令在主机上运行,这导致我仍然怀疑一些权限错误。我可以设置任何其他选项以允许使用容器中的蓝牙加密狗吗?
请注意,我在测试设备后从主机卸载,因为我在这里bluez
读到如果被某些蓝牙服务访问,它可能会被主机阻止。之后,我还确保在物理上重新连接加密狗。
编辑:还要注意(现在)我将主机系统上的 Docker 用户(dkr)添加到蓝牙和 netdev(后者不存在,所以我创建了它)组。我确认主机用户可以bluetoothctl
用来扫描设备 ( scan on/off
)。hcitool lescan
但是,由于某种原因,仍然不允许用户运行。
docker - Docker 无根错误:您需要与 /var/run/docker.sock 的卷共享您的 Docker 主机套接字
我正在尝试使用 Docker 无根。
我已按照官方文档中介绍的所有步骤进行操作。我还允许使用非特权端口,包括 443。
为了测试一切是否按我需要的方式工作,我安装了"nginx-proxy-automation"。
一切都安装得很完美。然而,jrcs/letsencrypt-nginx-proxy-companion:2.1
容器
报告以下错误:
这会导致容器每x秒重新启动一次。
我能做些什么来修复它?我错过了什么?
解决方法
根据@gdahlm 的回答,我首先尝试了以下方法:
但我收到以下错误:
错误:卷 unix://$XDG_RUNTIME_DIR/docker.sock:/tmp/docker.sock:ro 格式不正确,应该是 external:internal[:mode]
仅仅是因为卷路径中有一个额外的:
冒号。
因此,在这篇Trying Rootless Docker with Testcontainers文章中进一步挖掘,然后我尝试了
但它也不起作用,因为我收到以下错误:
错误:在服务“docker-gen-auto”中使用了命名卷“$XDG_RUNTIME_DIR/docker.sock:/tmp/docker.sock:ro”,但在卷部分未找到声明。
最后我尝试$XDG_RUNTIME_DIR
在终端中回显,如下所示:
我得到了:
/run/user/1000
所以,我将它硬编码到.env
文件变量中:
DOCKER_HOST_ROOTLESS_PATH=/run/user/1000/docker.sock
在docker-compose.yml
文件里面
它终于奏效了!
但是像这样在.env
文件中保留它:
DOCKER_HOST_ROOTLESS_PATH=$XDG_RUNTIME_DIR/docker.sock
没用。
docker-compose - 带有冒号错误的 Docker-compose 卷路径:格式不正确,应为外部:内部 [:模式]
我正在尝试在 Docker 上无根。
我正在使用jrcs/letsencrypt-nginx-proxy-companion:2.1
容器。
在docker-compose.yml
文件中,就在卷部分,我最初得到以下内容:
但是,由于我得到以下信息,您需要与 /var/run/docker.sock错误处的卷共享您的 Docker 主机套接字:
我不得不更换
- /var/run/docker.sock:/var/run/docker.sock:ro
为了
- unix:///run/user/1000/docker.sock:/var/run/docker.sock:ro
我还尝试将其.env
作为变量放入文件中:
- ${DOCKER_HOST_PATH:-/var/run/docker.sock}:/tmp/docker.sock:ro
但无论哪种方式,现在我收到以下错误:
卷 unix:///run/user/1000/docker.sock:/var/run/docker.sock:ro 格式不正确,应该是 external:internal[:mode]
这是由:
UNIX 单词后面的额外冒号引起的,正如这里所报告的那样。
我如何解决它?:
额外的冒号有什么解决方法吗?
containers - 是否可以列出其他用户使用 Podman 启动的正在运行的容器?
当我rootless
以非 root 用户身份运行容器时,我可以podman ps -a
以该用户身份查看它们。
但是,当我登录root
系统并运行podman ps -a
.
有没有办法让root
用户查看所有正在运行的容器,无论哪个用户启动了它们?
注意:我尝试将--root
选项设置为 Podman,但没有成功
docker - 具有 Windows AD 身份验证的无根 docker
最近,我开始使用 docker 作为我实验室的服务器。该服务器是安装了 Ubuntu 服务器 18.04 的 Linux 服务器。用户的登录验证使用 Windows Active Directory (AD)。我当前运行非 root docker 的解决方案是将用户添加到docker
组(ref)。
但是,我发现了一个严重的安全问题。AD 用户A
可以B
通过docker run -u B's uid:B's gid
. 在容器中,A
可以得到所有B
的许可。
运行非root docker的正确方法可能是新引入的' Rootless mode ',问题是rootless模式需要newuidmap和newgidmap,但是/etc/passwd和/etc/subuid等中没有列出AD用户,这意味着无根模式和userns-remap
模式不能用于我的情况(即 AD auth)。
有什么方法可以解决这个问题吗?非常感谢。
最好的。
docker - 在无根 docker 中运行图像,图像未显示
我已经使用这个链接配置了 rootles docker 。注意事项:我以前安装过带有一堆图像的 docker。当我尝试这样做docker images
时,它没有显示任何图像。但是当我这样做时,sudo docker images
它会显示我之前配置的图像。是否可以在“docker images”中实际看到那些“sudo docker images”并在不使用 sudo 的情况下运行它?
docker - 使用 terraform 使用上传的脚本安装 docker-rootless:找不到 systemd,无法连接到总线:没有这样的文件或目录
以下情况正在发生。
- 我使用 terraform 管理我的 AWS 基础设施。
- 我使用脚本和远程执行设置软件基础架构
- 我上传以下脚本:
- 我使用以下命令从 terraform 执行此脚本:
- 我收到以下错误:
最初,脚本中的所有命令都在“remote-exec”的“内联”块中执行,并且有效。然后我将命令移动到 instance-setup.sh 从需要以超级用户身份运行的命令中删除了“sudo”,将“sudo -u ubutnu”添加到需要以“ubuntu”用户身份执行的命令中并运行整个脚本为“sudo”。它会抛出这些错误。所以基本上 docker rootless 没有正确安装。你有任何想法如何解决这个问题吗?