Systemd

在 MacOS 上使用 systemd 的 Rocky Linux 容器

  • December 20, 2021

我有這個問題,希望在正確的地方提出,如果沒有,請隨時指導我。

我正在開發幾個 Ansible 角色,並使用Molecule作為測試角色的工具。Molecule 依次使用容器來測試角色。

我專門為基於 RHEL 8 的作業系統開發我的角色。我選擇使用 Rocky Linux 作為容器的作業系統,因為這是最接近 RHEL 的作業系統之一。

在一個角色中,有一些使用/利用 systemd 執行的任務。但是,預設情況下容器沒有可用的 systemd。有一些“變通方法”可以實際使 systemd 可用於容器,這是我的目標。

所以,我創建了一個在 Rocky Linux 容器中建構 systemd 的容器,遵循這個 Dockerfile

我建構了容器,並嘗試啟動它。

$ docker build -t my_test .
[+] Building 1.4s (6/6) FINISHED
...

然後,我嘗試執行容器,但它提供了一個錯誤。

$ 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 <dea75c1001fd>.
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 Linux 容器上成功建構具有 systemd 的容器?

資訊:MacOS 10.15.7,Docker 版本 20.10.11,建構 dea9396

如果您想擁有systemd內部容器並且您在systemd啟用的系統上執行,為什麼還要為外星人和非標準廢話而煩惱docker

所有最新的systemd系統都原生支持systemd-nspawnd容器: https ://www.freedesktop.org/software/systemd/man/systemd-nspawn.html

這些容器將systemd在本機內部執行,並且幾乎可以正常工作,包括服務管理和其他內容。這種類型的容器也不依賴於笨重的docker集線器,因此您可以輕鬆地在其中安裝核心支持的任何作業系統。

事實上,nspawnd 容器的行為更像是 freebsd 監獄或真正的虛擬機,而不是某些docker東西。在您的案例中,這將非常有意義。

編輯:

抱歉,我沒有註意到您使用的是 MacOS。

有一段時間我在處理 MacOS,我很確定他們的 linux 仿真是不存在的,即使是相反的情況,你當然不能成功地將這個核心模組載入到完全不同的系統架構:

Failed to insert module 'autofs4': No such file or directory

幾年前我聽說過一些用 go 編寫的 reasearch 使用者模式 linux 核心仿真,但我不完全確定是否docker甚至能夠處理它。

簡而言之,您為給定的工作使用了錯誤的工具。

正確的方法是執行輕量級 VM 並在其中執行 systemd。然後,您可以在心理上將該 VM 視為容器,畢竟這並不重要。

如果您確實需要執行一些特定於 linux 的容器化引擎來測試您的案例,請建構一個小型 centors/rhel/rocky VM 並將您的容器化框架安裝到其中(nspawn儘管預設情況下存在)。

引用自:https://unix.stackexchange.com/questions/683073