问题标签 [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 - 使现有的 Docker 容器无根
我不是在问如何从头开始创建无根容器。相反,我得到了一些部署为默认以 root 身份运行的预构建 Docker 容器映像的软件。我需要修改这些容器,以便它们可以部署在 Kubernetes 上,这意味着我需要使这些容器无根。需要明确的是,我没有这些容器的来源,所以我不能简单地从头开始重建它们。
我发现了很多关于构建无根容器的文章,但它们都假设您是从头开始构建容器。我花了几个小时搜索,但找不到任何关于将现有容器修改为无根的内容。
我意识到这可能是一个非常开放的问题,但我不知道我需要考虑的所有事情。我能够收集到的两件事是USER 1000
在 Dockerfile 中添加一行,以及调整某些文件和文件夹的所有权和权限。除此之外,我不确定我需要做什么。
networking - 如何使用 podman 为无根容器设置内部和外部网络
我正在尝试使用 podman 让网络与无根容器一起工作。启动并运行外部网络或内部网络都不是问题。使用 --network 选项,容器可以互相看到。但是 ping 8.8.8.8 不起作用。在没有 --network 或 --network=slirp4netns ping 8.8.8.8 的情况下启动容器确实可以按预期工作。当然在后一种情况下,没有内部网络。我认为这告诉我的是主机没有阻止来自容器内的外部访问。我面临的问题是我似乎无法让内部和外部网络同时在容器内工作。
我正在像这样启动容器:
内容start-test.sh
:
我已经通过以下测试检查了 selinux 不是原因:setenforce 0
以及。
是否有可能让内部和外部网络在容器内工作,如果可以,需要做什么?
docker - 在 docker rootless 上共享图像存储库
我目前在一台服务器上运行多个 docker 无根安装。我们的想法是让我们的开发人员包含为远程开发而运行的非 root 容器。一般来说,这工作得很好,但是我们意识到需要大量额外的存储空间,因为每个 docker 安装都单独存储它的图像。
是否可以在各种 docker 安装之间共享图像目录?我试图创建一个从用户主目录到中央目录的符号链接。这可行,但不幸的是,docker 服务是在用户上下文中执行的。由 docker 守护进程创建的镜像层归该用户所有,并且读/写权限仅限于该用户(并且仅限于该用户)。
你认为有可能为各种 docker 安装创建像中央图像存储库这样的东西吗?如果是,该怎么做?
docker - 运行 docker 容器时到套接字文件的符号链接不起作用
docker run 似乎没有正确处理套接字的符号链接。
问题:
我正在尝试使用无根 docker。连接到 docker 的套接字是 /run/user/1000/docker.sock。
但我需要使用 docker-compose 文件,其中运行带有卷映射的 traefik 容器,以便从容器内部访问 /var/run/docker.sock。我无法修改这个 docker-compose 文件。
为了使它工作,我尝试做一个符号链接 /var/run/docker.sock > /run/user/1000/docker.socket。它在我的主机上运行良好,我可以使用这个套接字与无根 docker 通信,但是在运行容器时,/var/run/docker.sock 文件不是一个套接字,而是一个目录。
如何重现:
要重现 docker run 的问题:
在 traefik 容器内:
谢谢您的帮助 :)
mount - 如何使用无根 Podman 挂载 NFS 共享?
运行无根 Podman 时如何挂载 NFS 共享mynfsserver.example.com:/path/to/share ?
截至今天(2022 年 1 月 8 日),我正在运行最新发布的 Podman。
Linux 内核版本为5.15.12。
c++ - 使用 debootstrap 进行迭代容器配置,就像 buildah 的'scratch'
从理论上讲,容器配置的迭代方法的想法真的很吸引我。在实践中,我很难让它发挥作用,尤其是在 podman/buildah 的无根生态系统中。
我开始觉得 podman/buildah 不是 debian 派生的 linux 发行版的最佳容器开发堆栈。一方面,apt 不支持 dnf 的“--installroot”选项/指令。我尝试将 debootstrap 与 buildah 的“scratch”一起使用,但没有成功……即,我收到“无法安装到目标”错误。
我应该说,我成功地将一个简单的 pod 与运行 NGINX、postgres 和服务的容器组合在一起,这是一个 c++ 库,我使用它来构建一个小型应用程序,用于代理来自 Web 前端的数据库绑定发布请求。问题在于它是一个杂项,主要症结在于基于服务的 C++ 应用程序。在编译和运行时依赖之间,我不确定最好的方法;不用说,我目前的方法行不通。
我会感谢经验丰富的从业者在基于 debian 的发行版上使用无根容器解决方案的任何和所有提示,尤其是。如果您正在推出自己的 C++ 微服务:我真的很想知道您进行配置的策略。提前谢谢了。
docker - 链接到在其他无根 docker 守护进程中运行的容器
我想将我所有的 docker 容器作为 docker 无根容器运行,以便潜在的入侵限制传播。
为了分离关注点,我还在我的服务器上创建了几个用户,每个用户都通过 systemd 运行 docker rootless 守护进程。我想达到的目标:
场景:
用户 a:运行反向代理,监听 80 和 443 端口
用户 b:运行博客
用户 c:运行网站用户 d:运行邮件服务器用户 e:运行多个游戏服务器
- 用户a的反向代理可以“到达”用户a和b的博客
- 邮件服务器不需要反向代理,可以在单独的网络中
- 任何一个用户都不能访问另一个用户的数据
我想尽可能使用 lxc-user-nic 或内置端口驱动程序以获得最低的开销,但我知道至少邮件服务器需要知道入站电子邮件的真实来源 IP 以进行垃圾邮件检查,所以我会用户 slirp4netns。
这甚至可以使用 docker rootless 还是我应该回到 rootful systemd docker 守护进程并创建在需要通信的用户之间共享的 docker 网络?我选择 docker rootless 的唯一原因是安全性,但我不确定我是否能赢得这么多,如果我避免图像以brrr和 root 运行它们的东西。
linux-namespaces - 重用由bubblewrap启动的进程的命名空间
用这个启动一个shell:
在主机上的另一个 shell 中,我们可以使用 lsns 看到这一点:
命名空间报告中的 lsns
主要问题:
如何在与第一个相同的命名空间中启动第二个 shell?
奖金问题:
据我了解,在大多数情况下,bubblewrap 创建了一个中间命名空间(只有用户命名空间?)
是否可以在bubblewrap 创建的中间命名空间中启动一个shell?
它会因为所有权限都已被中间命名空间中的气泡包装删除而无用吗?
这个想法是进一步的挂载/卸载可以在中间命名空间的最终命名空间中完成,或者其他一些特权的东西
欢迎任何解决方案,最好使用bubblewrap,否则最好使用nsenter 以及用于PoC 的原始setns 系统调用
请注意,bwrap 不是 setuid,我以非特权用户身份启动 bwrap,内核中启用了所有类型的命名空间,并且它们作为非特权用户正常工作 afaik
根据这个问题https://github.com/containers/bubblewrap/issues/253,bubblewrap 只能创建新的挂载命名空间,所以这个问题目前可能无法仅使用bubblewrap 来解决
Bubblewrap 在创建初始命名空间、简单且足够的配置方面做得很好,如果它创建的命名空间无法以任何方式正确重新输入,我可能会修补 bubblewrap 以便允许它或完全放弃它并编写一个基于bubblewrap如何做大多数事情的自己的setns包装器
Flatpak 使用bubblewrap 并允许输入命名空间,检查bubblewrap 是否创建中间命名空间,我试图理解https://github.com/flatpak/flatpak/blob/4735e3ea90d9cfa7237aa1de7818ba396a45f084/app/flatpak-builtins-enter.c处的代码但我无法让它手动工作
mysql - 通过将 keycloak 连接到同一 pod 上的数据库的权限问题
我有一个吊舱,其中有最新的 keycloak 和一个数据库作为容器。我已经尝试过mysql和postgres。对于他们两个,我的 keycloak 都尝试以“sa”用户身份连接到数据库,但无法做到这一点。我根本没有这样的用户,keycloak DB 的定义用户是'keycloak'。我以无根用户的身份使用 centOs 8,在 GitLab 中运行脚本。用于密钥斗篷的 Dockerfile:
yml中的Mysql和其他脚本:
错误是:
我的用户名:
podman - podman 无法刷新容器
在我的 rehel 8 上最近更新了 podman 3.4.2 之后,我在一个 pod 中的容器(包括 pod 本身)在将近 2 小时后退出。
我的操作系统:
更新 当我从我以无根用户登录的服务器注销时出现问题!