この質問がありますが、正しい場所で質問したいと思います。そうでない場合は、いつでもご案内ください。
複数のAnsibleロールを開発しており、分子キャラクターをテストするためのツールです。 Molecule はコンテナを順番に使用してロールをテストします。
私はRHEL 8ベースのオペレーティングシステム専用の役割を開発しました。 Rocky LinuxはRHELに最も近いオペレーティングシステムの1つなので、コンテナのオペレーティングシステムとして使用することにしました。
役割内には、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
ベストアンサー1
systemd
内部コンテナを持ち、アクティブなシステムで実行するには、systemd
なぜエイリアンと非標準のゴミを気にする必要がありますかdocker
?
すべての最新systemd
システムはsystemd-nspawnd
デフォルトでコンテナをサポートします。
https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html
これらのコンテナはsystemd
基本内部で実行され、サービス管理やその他の機能を含むほとんどすべての機能が機能します。このタイプのコンテナはかさばるハブに依存しないため、docker
内部カーネルでサポートされているすべてのオペレーティングシステムを簡単にインストールできます。
実際、nspawnコンテナは他のものよりもfreebsd刑務所や実際の仮想マシンのように動作しますdocker
。あなたのユースケースでは、これは完全に理解されています。
編集する:
申し訳ありません。 MacOSを使っているのか知りませんでした。
私はしばらくMacOSを扱ってきましたが、彼らのLinuxエミュレーションが存在しないと確信しています。逆に言っても、このカーネルモジュールをMacOSに正常にロードできません。まったく異なるシステムアーキテクチャ:
Failed to insert module 'autofs4': No such file or directory
数年前に書かれたいくつかのユーザーモードLinuxカーネルエミュレーションの研究について聞きましたが、これがdocker
これを処理できるかどうかは完全にはわかりませんでした。
簡単に言えば、特定のタスクに間違ったツールを使用しています。
正しい方法は、軽量仮想マシンを実行し、その中でsystemdを実行することです。その後、精神的にそのVMをコンテナとして考えることができますが、最終的には重要ではありません。
ユースケースをテストするためにいくつかのLinux関連コンテナ化エンジンを実行する必要がある場合は、小さなcentors / rhel / rocky VMを構築し、そこにコンテナ化フレームワークをインストールします(デフォルトnspawn
では存在します)。