Armadilloフォーラム

コンテナ内からシャットダウンするには

urasue

2023年8月7日 20時03分

いつもお世話になっております。

コンテナ内からシャットダウンする方法について教えて下さい。

例えば、GUIをコンテナで動作させ、そこからシャットダウンの要求を行った場合に、
ホスト側のOSまでシャットダウンするには、どのようにすればよいでしょうか。

コメント

at_dominique.m…

2023年8月8日 9時47分

urasueさん、

お世話になっています、
マルティネです。

> コンテナ内からシャットダウンする方法について教えて下さい。

いくつかの方法があります。

1. マニュアルの「10.4.10. コンテナからのpoweroffかreboot」に説明されているのは、少し汚いですが使用している busybox init の仕様を利用して、init プロセスをコンテナに見せて kill で制御できます:
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
コンテナにホスト側のプロセスを見えるようになりますので、セキュリティの面ではあまり褒められることではありませんが、すぐにできる簡単な方法です。

2. 制限を与えたくない場合は、podman のフックを使って、コンテナが停止した際に armadillo も停止させることができます。
設定が少しややっこしいですが、以下の手順の後にコンテナをリスタートして、コンテナのメインプロセスが終了する際に armadillo ごと停止するようになります。

armadillo:~# mkdir /etc/atmark/containers/shutdown_hook.d/
armadillo:~# vi /etc/atmark/containers/shutdown_hook.d/hook.json
{
"version": "1.0.0",
"when": { "always": true },
"hook": { "path": "/etc/atmark/containers/shutdown_hook.d/hook.sh" },
"stages": ["poststop"]
}
armadillo:~# vi /etc/atmark/containers/shutdown_hook.d/hook.sh
#!/bin/sh
 
shutdown
armadillo:~# chmod +x /etc/atmark/containers/shutdown_hook.d/hook.sh
armadillo:~# vi /etc/atmark/containers/shutdown_after_stop.conf
... 省略、以下の行を追加
add_args --hooks-dir=/etc/atmark/containers/shutdown_hook.d/
armadillo:~# persist_file -rv /etc/atmark/containers/
'/etc/atmark/containers/shutdown_after_stop.conf' -> '/mnt/etc/atmark/containers/shutdown_after_stop.conf'
mkdir: created directory '/mnt//etc/atmark/containers/shutdown_hook.d'
'/etc/atmark/containers/shutdown_hook.d/hook.sh' -> '/mnt/etc/atmark/containers/shutdown_hook.d/hook.sh'
'/etc/atmark/containers/shutdown_hook.d/hook.json' -> '/mnt/etc/atmark/containers/shutdown_hook.d/hook.json'

※ Armadillo IoT A6E で power-utils のサービスを使ってもう少し簡単にできますが、Armadillo IoT G4 や Armadillo 640 にはまだインストールしていません。今作業中のパッケージングの改善ができたら標準にインストールしようと考えています。

ご不明な点があればまた聞いてください。

よろしくお願いします。

マルティネさん

お世話になっております。
urasueです。

マニュアルに記載がありましたね。失礼いたしました。
1の方法で希望の動作になりました。

ありがとうございました。