lxc-autostart
Debian 11 Bullseye では、権限のないコンテナは起動しません。
Debian 11 Bullseye で無許可コンテナのリリースが修正されました。
回答lxc-unpriv-start
代わりに使用しますが、lxc-start
使用する場合はこの方法を利用できませんlxc-autostart
。
答え1
基本ソリューション
さて、数日の夜を明かりの終わりに各コンテナのための単純なシステム単位ファイルを作成しました。例は次のとおりです。
[Unit]
Description=Linux container my-container-name
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/lxc-start -n my-container-name
ExecStop=/usr/bin/lxc-stop -n my-container-name
StandardOutput=journal
User=my-lxc-user
Group=my-lxc-user
Delegate=yes
[Install]
WantedBy=multi-user.target
これはDelegate=yes
、公開されたアドバイスの簡単なフォローアップです。ここそしてまた回答上にリンクしておきました。
ユーザーがさまよういいえ必須(言及)ここ)。
この解決策の良い副作用は、(無許可の)コンテナをシャットダウンしてもホストシャットダウンが遅れないことです。ここ)信号を送信する代わりに使用法/usr/bin/lxc-stop -n my-container-name
で定義されているからです。ExecStop
チューニング - システムテンプレート
ありがとうsystemd テンプレート単位ファイルすべてのコンテナに単一の unif ファイルを使用できます。私の最終テンプレート単位ファイルは次のとおりです。
[Unit]
Description=Linux container %I
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/lxc-start -n %i
ExecStop=/usr/bin/lxc-stop -n %i
StandardOutput=journal
User=lxc
Group=lxc
Delegate=yes
[Install]
WantedBy=multi-user.target
ファイル名を指定し[email protected]
て配置したので、以下を/etc/systemd/system/
使用してすべてのコンテナを制御できます。systemctl COMMAND [email protected]
lxc.service
(この内容はオリジナルであり、責任があることをお知らせします。lxc-autostart
)
ユニットファイルなどの改良を歓迎します! - 専門家ではないので基本的に公式文書そしてこれは素晴らしい答えです。
チューニングシステムユーザーサービス
もう1つの進歩は、Systemdユーザーサービスを使用して新しいコンテナを展開するときにrootとして実行する必要がないことです。
単位ファイルは少し異なります。
[Unit]
Description=LXC container %I
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/lxc-start -n %i
ExecStop=/usr/bin/lxc-stop -n %i
StandardOutput=journal
Delegate=yes
[Install]
WantedBy=default.target
multi-user.target
だからこそ使用不可ユーザーサービスにはこれを使用する必要がありますdefault.target
。
今回は、ユーザーがログインするのではなく、起動時にサービスが開始されるようにユーザー遅延を有効にする必要があります。次のコマンドを使用して、ルートアカウントで遅延を有効にできます。loginctl enable-linger <my-lxc-user>
サービスファイルを保存し、以下を使用して有効にしました。.config/systemd/user/[email protected]
systemctl --user enable [email protected]
答え2
lxc
テストパッケージと共にDebian 11.2(バージョン4.0.11-1)を実行しています。使用するときmprudekのシステムユニット()、遅延セッションが有効かどうかにかかわらず、常に次のエラーが発生します。nano /etc/systemd/system/[email protected]
$ journalctl -f -u lxc@container1
Mär 10 20:32:42 vm-debian systemd[1]: [email protected]: Control process exited, code=exited, status=1/FAILURE
Mär 10 20:32:42 vm-debian lxc-unpriv-start[485]: Can't start an unprivileged container on a pure CGroups v2 host without a systemd user session running.
Mär 10 20:32:42 vm-debian lxc-unpriv-start[485]: If you are trying to get a non-interactive user to have unprivileged containers running, you need to
Mär 10 20:32:42 vm-debian lxc-unpriv-start[485]: enable lingering sessions for that user, via loginctl enable-linger lxcuser as root.
Mär 10 20:32:42 vm-debian systemd[1]: [email protected]: Failed with result 'exit-code'.
Mär 10 20:32:42 vm-debian systemd[1]: Failed to start LXC container container1.
以下のようにsystemdユニットを更新しましたが、魅力的に動作します。権限のないLXCコンテナがlxcuser
このアカウントで実行されます。
[Unit]
Description=LXC container %I
Requires=systemd-user-sessions.service
After=systemd-user-sessions.service
Wants=systemd-user-sessions.service
[Service]
Type=forking
ExecStart=/usr/bin/lxc-unpriv-start -n %i
ExecStop=/usr/bin/lxc-stop -n %i
StandardOutput=journal
User=lxcuser
Group=lxcuser
Delegate=yes
RemainAfterExit=1
Restart=on-failure
RestartSec=5
SuccessExitStatus=0
RestartForceExitStatus=1
[Install]
WantedBy=multi-user.target
$ loginctl enable-linger lxcuser
$ systemctl disable lxc@container1
$ systemctl stop lxc@container1
$ systemctl daemon-reload
$ systemctl enable lxc@container1
$ systemctl start lxc@container1