一部のコンテナの実行に使用します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
などを実行できます。
machinectl
systemd
を使用すると、起動時にコンテナを実行できますが、この記事を書くときには、この機能を含む安定したDebianバージョンはありません。