Armadilloフォーラム

Raspberry Pi で動作しているコンテナを Armadillo で動作するための手順について

naka16

2025年4月11日 14時28分

==========
製品型番:AGX4520-C03D0
==========

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

Raspberry Pi で動作しておりますアプリ(コンテナ)を御社の Armadillo-IoT G4上で動作させたいと
考えております。

初歩的な質問となりまして恐縮ですが、手順等ご教授いただきたく、よろしくお願いします。

ドキュメントの参照箇所等のご提示でも構いませんので、お手数をおかけしますが、
よろしくお願いします。

コメント

アットマークテクノの古賀です。

naka16さん:
>==========
>製品型番:AGX4520-C03D0
>==========

>Raspberry Pi で動作しておりますアプリ(コンテナ)を御社の Armadillo-IoT G4上で動作させたいと
>考えております。

お使いの Raspberry Pi の型番は、何でしょうか?
おそらく aarch64 (ARM 64bit) の CPU コアの機種かとは思いますが、ご確認くださいませ。

>初歩的な質問となりまして恐縮ですが、手順等ご教授いただきたく、よろしくお願いします。
>
>ドキュメントの参照箇所等のご提示でも構いませんので、お手数をおかけしますが、
>よろしくお願いします。

互換性のある CPU コアのボード間でコンテナを持ち運ぶ場合、次の手順となります:

(1) 持ち運び元(今回の場合は Raspberry Pi)で、コンテナエンジン(Docker)の export コマンドか save コマンドを使い、コンテナイメージを tar アーカイブとして保存する。

(2) 持ち運び先(今回の場合は Armadillo-IoT G4)で、コンテナエンジン(podman)の import コマンドか load コマンドを使い、コンテナイメージを読み込む。

(3) 読み込んだコンテナイメージからコンテナを生成・起動する。

なお、持ち運ぶアプリケーションが、Raspberry Pi 固有のハードウェア(つまり、Raspberry 固有のデバイスドライバ)を使用している場合は、持ち運び先の Armadillo-IoT G4 では動作しません。エラーになってしまいます。
また、互換性のあるハードウェア(つまり、同じ名前のデバイスドライバ)を使用している場合であっても、上記 (3) でコンテナを作成する際に、デバイスドライバの使用許可をコンテナに与える設定が必要です。

(1) と (2) の、コンテナイメージ持ち運び用のコマンドについては、それぞれ以下をご覧ください:

・docker export
 https://docs.docker.jp/engine/reference/commandline/export.html
・docker save
 https://docs.docker.jp/engine/reference/commandline/save.html

・podman import
 https://docs.podman.io/en/stable/markdown/podman-import.1.html
・podman load
 https://docs.podman.io/en/stable/markdown/podman-load.1.html

docker export でコンテナイメージを書き出した場合は podman import で読み込み、docker save でコンテナイメージを保存した場合は podman load で読み込んでください。

以上、ひとまずコメントです。不明な点などありましたら、お知らせください。

> アットマークテクノの古賀です。
>
> naka16さん:
> >==========
> >製品型番:AGX4520-C03D0
> >==========
> …
> >Raspberry Pi で動作しておりますアプリ(コンテナ)を御社の Armadillo-IoT G4上で動作させたいと
> >考えております。
>
> お使いの Raspberry Pi の型番は、何でしょうか?
> おそらく aarch64 (ARM 64bit) の CPU コアの機種かとは思いますが、ご確認くださいませ。
>
> >初歩的な質問となりまして恐縮ですが、手順等ご教授いただきたく、よろしくお願いします。
> >
> >ドキュメントの参照箇所等のご提示でも構いませんので、お手数をおかけしますが、
> >よろしくお願いします。
>
> 互換性のある CPU コアのボード間でコンテナを持ち運ぶ場合、次の手順となります:
>
> (1) 持ち運び元(今回の場合は Raspberry Pi)で、コンテナエンジン(Docker)の export コマンドか save コマンドを使い、コンテナイメージを tar アーカイブとして保存する。
>
> (2) 持ち運び先(今回の場合は Armadillo-IoT G4)で、コンテナエンジン(podman)の import コマンドか load コマンドを使い、コンテナイメージを読み込む。
>
> (3) 読み込んだコンテナイメージからコンテナを生成・起動する。
>
> なお、持ち運ぶアプリケーションが、Raspberry Pi 固有のハードウェア(つまり、Raspberry 固有のデバイスドライバ)を使用している場合は、持ち運び先の Armadillo-IoT G4 では動作しません。エラーになってしまいます。
> また、互換性のあるハードウェア(つまり、同じ名前のデバイスドライバ)を使用している場合であっても、上記 (3) でコンテナを作成する際に、デバイスドライバの使用許可をコンテナに与える設定が必要です。
>
> (1) と (2) の、コンテナイメージ持ち運び用のコマンドについては、それぞれ以下をご覧ください:
>
> ・docker export
>  https://docs.docker.jp/engine/reference/commandline/export.html
> ・docker save
>  https://docs.docker.jp/engine/reference/commandline/save.html
>
> ・podman import
>  https://docs.podman.io/en/stable/markdown/podman-import.1.html
> ・podman load
>  https://docs.podman.io/en/stable/markdown/podman-load.1.html
>
> docker export でコンテナイメージを書き出した場合は podman import で読み込み、docker save でコンテナイメージを保存した場合は podman load で読み込んでください。
>
> 以上、ひとまずコメントです。不明な点などありましたら、お知らせください。

ご教授いただきましてありがとうございます。

> お使いの Raspberry Pi の型番は、何でしょうか?
Raspberry Pi 4 となります。

手順 (1) , (2) につきましては、無事に実行できましたが、(3) で以下のようなエラーが発生しております。

podman run --name blesensor switchbot:latest
Error: crun: open executable: Operation not permitted: OCI permission denied

対処法が分からず、お手数をおかけしまして申し訳ありませんが、ご教授のほど、よろしくお願いいたします。

アットマークテクノの古賀です。

naka16さん:
>>互換性のある CPU コアのボード間でコンテナを持ち運ぶ場合、次の手順となります:
>>
>>(1) 持ち運び元(今回の場合は Raspberry Pi)で、コンテナエンジン(Docker)の export コマンドか save コマンドを使い、コンテナイメージを tar アーカイブとして保存する。
>>
>>(2) 持ち運び先(今回の場合は Armadillo-IoT G4)で、コンテナエンジン(podman)の import コマンドか load コマンドを使い、コンテナイメージを読み込む。
>>
>>(3) 読み込んだコンテナイメージからコンテナを生成・起動する。
>>
>>なお、持ち運ぶアプリケーションが、Raspberry Pi 固有のハードウェア(つまり、Raspberry 固有のデバイスドライバ)を使用している場合は、持ち運び先の Armadillo-IoT G4 では動作しません。エラーになってしまいます。
>>また、互換性のあるハードウェア(つまり、同じ名前のデバイスドライバ)を使用している場合であっても、上記 (3) でコンテナを作成する際に、デバイスドライバの使用許可をコンテナに与える設定が必要です。

>ご教授いただきましてありがとうございます。
>
>>お使いの Raspberry Pi の型番は、何でしょうか?
>
>Raspberry Pi 4 となります。

了解しました。
追加で確認ですが、Raspberry Pi OS は 64bit 版をお使いでしょうか?

>手順 (1) , (2) につきましては、無事に実行できましたが、(3) で以下のようなエラーが発生しております。
>
>podman run --name blesensor switchbot:latest
>Error: crun: open executable: Operation not permitted: OCI permission denied
>
>対処法が分からず、お手数をおかけしまして申し訳ありませんが、ご教授のほど、よろしくお願いいたします。

コンテナ起動時に実行するプログラムを実行できないかまたは、実行するプログラムが指定されていない状況だと思われます。
お使いのコンテナアプリケーションですが、コンテナ起動時に実行するプログラムは何でしょうか?

お使いのコンテナアプリケーションのコンテナイメージを Dockerfile から生成していらした場合は、Dockerfile の CMD または ENTRYPOINT で指定していらしたコマンドを教えてくださいませ。

Dcokerfile が手元にない場合は、Raspberry Pi で docker inspect コマンドを使って調べてみてくださいませ:

docker inspect -f "{{ .Config.Cmd  }}" [コンテナイメージ名]
docker inspect -f "{{ .Config.Entrypoint  }}" [コンテナイメージ名]

おそらく、docker export と podman import をお使いになったのだと思います。
docker save と podman load を使えば、コンテナイメージのメタデータも持ち運べますので、そちらをお使いになる方が手っ取り早いかも知れません。

古賀様

 お世話になっております。
 いろいろご教授いただきまして、ありがとうございます。

> docker save と podman load を使えば、コンテナイメージのメタデータも持ち運べますので、そちらをお使いになる方が手っ取り早いかも知れません。

 上記コマンドにて対応いたしました。

 今回は、BLEセンサーからのデータをコンテナから収集するプログラム(bluepy使用)となっております。

 podman run --name switchbot01 --cap-add=SYS_ADMIN --cap-add=NET_ADMIN --net=host -it ble-armadillo-ble_sensor python publish_test.py

 で実行しましたところ、以下のエラーが発生しております。

 Failed to execute management command 'scanend' (code: 11, error: Rejected)

 コンテナ内で bluetooth を有効にする方法など、解決策のご教授をお願いいたします。

> アットマークテクノの古賀です。
>
> naka16さん:
> >>互換性のある CPU コアのボード間でコンテナを持ち運ぶ場合、次の手順となります:
> >>
> >>(1) 持ち運び元(今回の場合は Raspberry Pi)で、コンテナエンジン(Docker)の export コマンドか save コマンドを使い、コンテナイメージを tar アーカイブとして保存する。
> >>
> >>(2) 持ち運び先(今回の場合は Armadillo-IoT G4)で、コンテナエンジン(podman)の import コマンドか load コマンドを使い、コンテナイメージを読み込む。
> >>
> >>(3) 読み込んだコンテナイメージからコンテナを生成・起動する。
> >>
> >>なお、持ち運ぶアプリケーションが、Raspberry Pi 固有のハードウェア(つまり、Raspberry 固有のデバイスドライバ)を使用している場合は、持ち運び先の Armadillo-IoT G4 では動作しません。エラーになってしまいます。
> >>また、互換性のあるハードウェア(つまり、同じ名前のデバイスドライバ)を使用している場合であっても、上記 (3) でコンテナを作成する際に、デバイスドライバの使用許可をコンテナに与える設定が必要です。
> …
> >ご教授いただきましてありがとうございます。
> >
> >>お使いの Raspberry Pi の型番は、何でしょうか?
> >
> >Raspberry Pi 4 となります。
>
> 了解しました。
> 追加で確認ですが、Raspberry Pi OS は 64bit 版をお使いでしょうか?
>
> >手順 (1) , (2) につきましては、無事に実行できましたが、(3) で以下のようなエラーが発生しております。
> >
> >podman run --name blesensor switchbot:latest
> >Error: crun: open executable: Operation not permitted: OCI permission denied
> >
> >対処法が分からず、お手数をおかけしまして申し訳ありませんが、ご教授のほど、よろしくお願いいたします。
>
> コンテナ起動時に実行するプログラムを実行できないかまたは、実行するプログラムが指定されていない状況だと思われます。
> お使いのコンテナアプリケーションですが、コンテナ起動時に実行するプログラムは何でしょうか?
>
> お使いのコンテナアプリケーションのコンテナイメージを Dockerfile から生成していらした場合は、Dockerfile の CMD または ENTRYPOINT で指定していらしたコマンドを教えてくださいませ。
>
> Dcokerfile が手元にない場合は、Raspberry Pi で docker inspect コマンドを使って調べてみてくださいませ:
>
>

> docker inspect -f "{{ .Config.Cmd  }}" [コンテナイメージ名]
> docker inspect -f "{{ .Config.Entrypoint  }}" [コンテナイメージ名]
> 

>
> おそらく、docker export と podman import をお使いになったのだと思います。
> docker save と podman load を使えば、コンテナイメージのメタデータも持ち運べますので、そちらをお使いになる方が手っ取り早いかも知れません。

アットマークテクノの古賀です。

naka16さん:
>今回は、BLEセンサーからのデータをコンテナから収集するプログラム(bluepy使用)となっております。
>
>podman run --name switchbot01 --cap-add=SYS_ADMIN --cap-add=NET_ADMIN --net=host -it ble-armadillo-ble_sensor python publish_test.py
>
>で実行しましたところ、以下のエラーが発生しております。
>
>Failed to execute management command 'scanend' (code: 11, error: Rejected)
>コンテナ内で bluetooth を有効にする方法など、解決策のご教授をお願いいたします。

お使いになっていらっしゃる Armadillo-IoT G4 の型番が AGX4520-C03D0、つまり「Armadillo-IoTゲートウェイ G4 LTE+WLANモデル 開発セット」ですから、Bluetooth モジュールは、本体搭載の WLAN+BT コンボモジュール(AW-XM458)をお使いですね。
 https://armadillo.atmark-techno.com/blog/15349/14172

Armadillo-IoT G4 で Bluetooth 機能を利用する手順は、マニュアルの「BT デバイスを使用する」で説明しています:
 https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
この説明の最初の方にある「ソフトウェア仕様」に、AW-XM458 の Blueooth 機能を利用するために必要な Devicetree Overlay の設定手順を記載しています。
この手順を行ってみてくださいませ。

古賀様

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

 早朝にもかかわらず、ご教授いただきまして誠にありがとうございます。

> この説明の最初の方にある「ソフトウェア仕様」に、AW-XM458 の Blueooth 機能を利用するために必要な Devicetree Overlay の設定手順を記載しています。
> この手順を行ってみてくださいませ。

 この設定を行いましたが、現象は変わらず、

Failed to execute management command 'scanend' (code: 11, error: Rejected)

 が発生しております。

 何度もお手数をおかけして申し訳ありませんが、よろしくお願いいたします。

> アットマークテクノの古賀です。
>
> naka16さん:
> >今回は、BLEセンサーからのデータをコンテナから収集するプログラム(bluepy使用)となっております。
> >
> >podman run --name switchbot01 --cap-add=SYS_ADMIN --cap-add=NET_ADMIN --net=host -it ble-armadillo-ble_sensor python publish_test.py
> >
> >で実行しましたところ、以下のエラーが発生しております。
> >
> >Failed to execute management command 'scanend' (code: 11, error: Rejected)
> >コンテナ内で bluetooth を有効にする方法など、解決策のご教授をお願いいたします。
>
> お使いになっていらっしゃる Armadillo-IoT G4 の型番が AGX4520-C03D0、つまり「Armadillo-IoTゲートウェイ G4 LTE+WLANモデル 開発セット」ですから、Bluetooth モジュールは、本体搭載の WLAN+BT コンボモジュール(AW-XM458)をお使いですね。
>  https://armadillo.atmark-techno.com/blog/15349/14172
>
> Armadillo-IoT G4 で Bluetooth 機能を利用する手順は、マニュアルの「BT デバイスを使用する」で説明しています:
>  https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
> この説明の最初の方にある「ソフトウェア仕様」に、AW-XM458 の Blueooth 機能を利用するために必要な Devicetree Overlay の設定手順を記載しています。
> この手順を行ってみてくださいませ。

アットマークテクノの古賀です。

naka16さん:
>>この説明の最初の方にある「ソフトウェア仕様」に、AW-XM458 の Blueooth 機能を利用するために必要な Devicetree Overlay の設定手順を記載しています。
>>この手順を行ってみてくださいませ。
>
> この設定を行いましたが、現象は変わらず、
>
>Failed to execute management command 'scanend' (code: 11, error: Rejected)
>
> が発生しております。

可能性としては、お使いのコンテナ内に bluetooth スタックがインストールされておらず、Raspberry Pi では、ホスト OS 上の bluetooth スタックをコンテナから使う構成だった、というのがありますね。

マニュアルの、上記箇所の後にある「使用方法」では、bluetooth スタック(bluez)をコンテナ内にインストールして、debus-dameon と bluetoothd を起動した後に bluetoothctrl を実行する手順を説明しています。
この手順の 'apk' を 'apt' に置き換えて、bluez のインストールから行ってみると、どうなるでしょうか?

古賀様

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

 いろいろヒントをいただきまして、ありがとうございます。

 以下の対応を行いまして、無事に BLE温湿度センサーからのデータを取得でき、クラウドまで上げることができました。

(Dockerfile)
・dbus, bluez をインストール
 ・ENTRYPOINT ["bt.sh"]

(bt.sh)
#!/bin/bash
dbus-daemon --system
/usr/sbin/bluetoothd &
python publish_test.py

 以上となります。

 お忙しい中、いろいろご教授いただきまして、誠にありがとうございました。

> アットマークテクノの古賀です。
>
> naka16さん:
> >>この説明の最初の方にある「ソフトウェア仕様」に、AW-XM458 の Blueooth 機能を利用するために必要な Devicetree Overlay の設定手順を記載しています。
> >>この手順を行ってみてくださいませ。
> >
> > この設定を行いましたが、現象は変わらず、
> >
> >Failed to execute management command 'scanend' (code: 11, error: Rejected)
> >
> > が発生しております。
>
> 可能性としては、お使いのコンテナ内に bluetooth スタックがインストールされておらず、Raspberry Pi では、ホスト OS 上の bluetooth スタックをコンテナから使う構成だった、というのがありますね。
>
> マニュアルの、上記箇所の後にある「使用方法」では、bluetooth スタック(bluez)をコンテナ内にインストールして、debus-dameon と bluetoothd を起動した後に bluetoothctrl を実行する手順を説明しています。
> この手順の 'apk' を 'apt' に置き換えて、bluez のインストールから行ってみると、どうなるでしょうか?