首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MacOS上带有systemd的Rocky容器

在MacOS上带有systemd的Rocky容器
EN

Unix & Linux用户
提问于 2021-12-19 13:47:14
回答 2查看 1.2K关注 0票数 1

我有一个问题,我希望是在正确的地方问,如果没有,请随时指导我。

我正在开发几个Ansible角色,并使用分子作为测试角色的工具。分子依次使用容器来测试其作用。

我正在为基于RHEL 8的操作系统专门开发我的角色。我选择使用Rocky Linux作为容器的操作系统,因为这是与RHEL最接近的操作系统之一。

在角色中,有使用/利用systemd执行的任务。但是,默认情况下,容器没有系统d可用。实际上,有一些“解决办法”可以使系统可用于容器,这是我的目标。

因此,我创建了一个容器,它在Rocky容器跟随这个文档中构建systemd。

我构建容器,并尝试启动它。

代码语言:javascript
复制
$ docker build -t my_test .
[+] Building 1.4s (6/6) FINISHED
...

然后,我尝试运行容器,但它提供了一个错误。

代码语言:javascript
复制
$ docker run --tty --privileged --volume /sys/fs/cgroup:/sys/fs/cgroup:ro my_test
Failed to insert module 'autofs4': No such file or directory
systemd 239 (239-51.el8) running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy)
Detected virtualization docker.
Detected architecture x86-64.

Welcome to Rocky Linux 8.5 (Green Obsidian)!

Set hostname to .
Initializing machine ID from random generator.
Failed to create /init.scope control group: Read-only file system
Failed to allocate manager object: Read-only file system
[!!!!!!] Failed to allocate manager object, freezing.
Freezing execution.

问题:我如何成功地构建一个在Rocky容器上可用系统的容器?

信息: MacOS 10.15.7,Docker版本20.10.11,构建dea9396

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2021-12-19 16:26:15

如果您想让systemd在容器中运行,并且在启用systemd的系统上运行,那么为什么要费心使用外星和非标准的垃圾(如docker )呢?

所有最新的systemd系统本机支持systemd-nspawnd容器:https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html

这些容器将在内部本地运行systemd,并且几乎可以完成所有的工作,包括服务管理和其他工作。这种类型的容器也不依赖于笨重的docker集线器,因此您可以轻松地在内核支持的任何操作系统内安装。

事实上,nspawnd容器的行为更像freebsd监狱或真正的vms,而不是一些docker内容。在您的用例中,这将是非常合理的。

编辑:

对不起,我没有注意到你在MacOS上。

已经有一段时间我在处理MacOS,而且我很确定他们的linux仿真是不存在的,即使情况正好相反,您也不能成功地将这个内核模块加载到完全不同的系统架构中:

代码语言:javascript
复制
Failed to insert module 'autofs4': No such file or directory

我听说过几年前用go编写的一些搜索用户模式linux内核仿真,但我不完全确定docker是否或甚至能够处理这个问题。

简而言之,对于给定的工作,您使用的工具是错误的。

正确的方法是运行轻量级VM并在其中运行systemd。然后,您可以在精神上将该VM视为容器,毕竟这并不重要。

如果您确实需要运行一些特定于linux的容器化引擎来测试您的用例,那么可以构建一个小型的中间代码/rhel/rocky,并将您的容器化框架安装到其中(不过,默认情况下nspawn是存在的)。

票数 1
EN

Unix & Linux用户

发布于 2022-08-04 21:42:43

下面是一个让systemd在MacOS上的码头容器中工作的例子,使用一个docker-compose.yml文件来挂载/sys/fs/cgroup卷和必要的tmpfs目录:

https://github.com/moby/moby/issues/30723#issuecomment-365927679

通过将以下内容添加到它们的坞-组合文件中:

代码语言:javascript
复制
    privileged: true
    cap_add:
      - SYS_ADMIN
    security_opt:
      - seccomp:unconfined
    tmpfs:
      - /run
      - /run/lock
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro

在这个问题线程的其他地方,解释了mac上的docker使用自己的linux,所以容器装载它,而/sys/fs/cgroup不需要存在于Mac上。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/683073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档