systemd-nspawnコンテナの背景を設定するには?

systemd-nspawnコンテナの背景を設定するには?

一部のコンテナの実行に使用しますsystemd-nspawn。バックグラウンドで実行するために使用できますsystemctl start systemd-nspawn@foo。しかし時々systemd-nspawn -bD foo。バックグラウンドで送信する方法が見つかりません。図のように端末を閉じると、コンテナのみがシャットダウンされますmachinectl list。私はこれを行うことができますか?それではどうですか?

私はコンテナが単純なプロセス以上であることを知っていますが、その意味では、望ましい効果はバックグラウンドプロセスと同じです。コンテナは実行されますが、元のシェルは私に再提供されることを望みます。

答え1

まあ、それは価値があるので、次は私にとって効果的でした。

sudo systemd-nspawn -bxD/

私が与えないことを除いて、あなたとほぼ同じです。machine名前を入力し、-xコンテナのルートディレクトリの一時btrfsスナップショットを取得します。/

gettyこれにより、私の端末ptyにコンテナが表示され、loginすべてのエントリがログインします。

しばらく少し混乱していたことは認めますが、systemctlコンテナを少し後ろに見た後にzsh気づきました。(コンテナ内で実行):

systemctl stop console-getty.service

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or other units.
Authenticating as: mikeserv
Password:
==== AUTHENTICATION COMPLETE ===

これにより、システムは端末制御を放棄します。唯一のことは、私が最初にそれを使用していたということですsudo。また、認証のための独自の端末制御層もあります。これは空のターミナルを残し、kill -CONT "$(pgrep ksh)"私には役に立ちません。だから1~2分ほどもっと戸惑いましたが、(他の端末から)...

sudo fuser -v /dev/pts/*

                     USER        PID ACCESS COMMAND
/dev/pts/0:          mikeserv   8347 F.... zsh
                     root      18003 F.... sudo
/dev/pts/13:         mikeserv   9553 F.... zsh
                     mikeserv  16838 F.... ksh
                     root      17657 F.... sudo
                     root      17658 F.... systemd-nspawn
/dev/pts/14:         root      17675 F.... systemd

私は上記のリストを受け取り、それで考えました。一体何ですか?

sudo kill -STOP 17657

それから - 見なさい、見なさい - 私はksh同じターミナルに戻った。要約すると、まだアクセス権があることを確認する必要があります。machineもちろん、そうでなければ役に立ちません。

machinectl -l

MACHINE                    CLASS     SERVICE
localhost-35ceaa76b1306897 container nspawn

いいですね…

sudo machinectl login localhost-35ceaa76b1306897

Connected to machine localhost-35ceaa76b1306897. 
Press ^] three times within 1s to exit session.

Arch Linux 4.0.7-2-ARCH (pts/0)

localhost-35ceaa76b1306897 login:

getty別のターミナルでもう一つ受け取りました!

答え2

同様の問題があります。私のアプローチは、dtachコンテナを実行している端末からの接続と分離を制御することです。その後、コンテナ内でtmux/screenなどを実行できます。

machinectlsystemdを使用すると、起動時にコンテナを実行できますが、この記事を書くときには、この機能を含む安定したDebianバージョンはありません。

関連情報