debootstrap
実行時に起動するディレクトリがある場合に内部でsystemd-nspawn
動作させるにはどうすればよいですかsystemd
?
$ sudo systemd-nspawn -D ./foo
Spawning container mschroot on /opt/foo.
Press ^] three times within 1s to kill container.
root@foo:~# systemctl
Failed to connect to bus: No such file or directory
手動で試してみると、mount --bind
他のエラーが発生します。
$ sudo mount --bind /proc /opt/foo/proc
$ sudo chroot /opt/foo/
root@x230:/# systemctl
Running in chroot, ignoring request.
起動したいこのchrootにサービスがインストールされていますか?
答え1
systemd
コンテナ内の機能を使用するには、systemd-nspawn
いくつかの作業を行う必要があります。
dbus
あなたの容器に- 実際にコンテナを起動する必要があります。
systemd-nspawn --boot
答え2
systemdはここで正確です。 chrootで実行しようとしていますが、chrootにはまったく異なるパス、ライブラリ、およびサービスセットがあります。 systemctl呼び出しを許可すると混乱する可能性があります。正しいD-Busライブラリですか?内部のsystemctlバージョンは外部デーモンバージョンと同じですか?
chroot内でのみサービスを使用するには、2つのオプションがあります。
- 使用新しいポータブルサービス、systemd 239で導入されました。内部サービスを外部からアクセスできるようにしたい場合は、これがあなたが望むものです。
- chroot メモリが systemd にあり、
systemd-nspawn --boot
chroot 内で別々の systemd インスタンスを実行するために使用されることを確認します。その後、有効にすることができ、内部的にのみ適用されます。