Armadilloフォーラム

[Armadillo-610] コンテナ起動順の設定について

masa.yamaguchi

2025年3月24日 16時03分

==========
製品型番:Aramadillo-610
ABOSバージョン:3.20.3-at.8
カーネルバージョン: 5.10.233
その他:ATDE9を使用
==========

Armadillo-610起動時について以下お伺いしたいことがございます。

  https://armadillo.atmark-techno.com/forum/armadillo/11943

①コンテナの起動順について
 上記URLは「Armadillo-IoT G4」の内容です。
 Armadillo-610でArmadilo Base OS を使用する場合も同様に名前順での起動になりますでしょうか。

②コンテナ起動順の制御について
 上記URLに以下記載がございます。
  「代わりに、conf ファイルとは shell で実行されてますのでどうしても待つ必要があれば sh を利用して polling することは一応可能です」
 具体的にはどのような処理になりますでしょうか。差し支えなければ、サンプルコードがあればご教示頂きたいです。

コメント

at_dominique.m…

2025年3月25日 9時15分

マルティネです。

> ①コンテナの起動順について
>  上記URLは「Armadillo-IoT G4」の内容です。
>  Armadillo-610でArmadilo Base OS を使用する場合も同様に名前順での起動になりますでしょうか。

はい、ascii順です(0-9 < A-Z < a-z)

ただし、リンクしていただいた回答にも書きましたが、コンテナの起動が完了される保証はありません(バックグラウンドで実行されます)ので、
https://armadillo.atmark-techno.com/forum/armadillo/24737 に問い合わせたようにコンテナ1でマウントを行ってもコンテナ2を起動する際にマウントが完了される保証はありません。

> ②コンテナ起動順の制御について
>  上記URLに以下記載がございます。
>   「代わりに、conf ファイルとは shell で実行されてますのでどうしても待つ必要があれば sh を利用して polling することは一応可能です」
>  具体的にはどのような処理になりますでしょうか。差し支えなければ、サンプルコードがあればご教示頂きたいです。

正直なところ、待つものによります。
マウントの件でしたら、コンテナ起動前にどうしてもマウントする必要はないと考えてますので、アプリケーション側(コンテナ内)でリトライすれば一番綺麗に収まると思います。
また、当時に hotplug の対応はなかったので、ビデオカメラでも「add_devices」で提供する前に待つ必要あったころの案内なので polling を提案にしていましたが、今なら add_hotplugs video4linux で認識が遅くてもコンテナで認識されるようになりますので polling の実装は基本的に不要になったと思います。

config ファイルで polling するとタイムアウトも考慮する必要がありますし、デメリットもありますので、例としてあまり書きたくないところです。
お手数ですが必要としている理由を教えていただければ適切に案内をさせていただければと思います。
(また、マウントを待ちたい理由でしたら話が読みづらくなるだけですので、もう一つのフォーラムで話を続きましょう)

よろしくお願いします。

マルティネ 様

masa.yamaguchiです。

お手数ですが必要としている理由を教えていただければ適切に案内をさせていただければと思います。
(また、マウントを待ちたい理由でしたら話が読みづらくなるだけですので、もう一つのフォーラムで話を続きましょう)

ご回答ありがとうございます。

<必要としている理由>
MQTT(mosqutto)を使用したコンテナ間通信をしようとしております。
そのため、一番最初に broker機能コンテナが完全に起動完了してから、
他のコンテナを起動したいと思い質問させていただいております。
(microSDのマウントはここでは関係がございません)

上記のbrokerコンテナを一番最初に起動~起動完了まで実施する方法があればご教示頂きたいです。

at_dominique.m…

2025年3月25日 14時31分

masa.yamaguchiさん

マルティネです。

> MQTT(mosqutto)を使用したコンテナ間通信をしようとしております。
> そのため、一番最初に broker機能コンテナが完全に起動完了してから、
> 他のコンテナを起動したいと思い質問させていただいております。

了解しました。

> 上記のbrokerコンテナを一番最初に起動~起動完了まで実施する方法があればご教示頂きたいです。

それでしたら、コンフィグファイルで待つ必要はないと思います。
いくつか方法はあります。

1. 他のコンテナで「broker への接続が失敗した場合にコンテナをエラーで終了させる」だけでもいいです。
デフォルト(set_restart on-failure)では、set_command で指定したコマンドが失敗で終了するとコンテナが自動的にリスタートされますので、いずれ broker コンテナが完了して子コンテナも成功するはずです。(例えば python の場合は sys.exit(1) でスクリプトを終了させます)
Armadillo 610 は遅いので、何回かコンテナをリスタートする処理はちょっと嬉しくないですが、開発の手間は一番少ない方法だと考えています。

2. アプリケーション(コンテナ内)でリトライ処理を行うのが綺麗ですね。
開発している言語が分かりませんので具体的な例は難しいですが、例えば init 関数を作って、その中に while True の形で接続を試して成功するまでリトライし続けると、失敗の場合の待ち時間などを調整できますし、失敗の場合の不要な処理負担も少ないのでいいと思います。

リンクしていただいたフォーラムでの「config ファイルで polling する」方法も一応可能ですが、polling するために mqtt サーバーの起動完了基準が必要ですので、アプリ側で実装した方がいいと思います。

よろしくお願いします。

マルティネ 様

masa.yamaguchiです。

ご回答ありがとうございます。
「アプリケーション(コンテナ内)でリトライ処理を行う」が今回の目的に合致しているので、
こちらを検討させて頂きます。
お手数をおかけして申し訳ございませんでした。