Armadilloフォーラム

コンテナのデフォルトのコマンドとset_commandについて

kinoshita3322

2025年8月7日 10時12分

==========
製品型番:A9E
==========
お世話になっております。

remoteit-agentのコンテナイメージを使用して開発をしているのですが、
コンテナの設定ファイルで下記のようにシェルスクリプトを実行すると、
コンテナとホストOS内に作成されるはずのconfig.jsonが作成されなくなり、
remoteitのターゲット機能も起動しません。

コンテナの設定ファイル

#app.conf
set_image localhost/{{PROJECT}}:latest
set_ip 10.88.0.100
 
# Add environment variables set by Atmark Techno.
add_armadillo_env
 
# podman runのオプションを設定
add_args --hostname "ArmadilloA9E_$AT_SERIAL_NUMBER" -v /var/app/volumes/:/etc/remoteit -e R3_REGISTRATION_CODE="XXXX" --privileged
 
# mount app sources and data:
# - /var/app/rollback/volumes can be rolled back on failed
# upgrades, suitable for application sources and assets.
# - /var/app/volumes is not copied on updates and more suitable
# for volatile data such as logs and databases.
# - "/vol_app:ro" means to make "/vol_app" read-only.
# If this is inconvenient, please remove ":ro".
add_volumes /var/app/rollback/volumes/{{PROJECT}}:/vol_app
add_volumes /var/app/volumes/{{PROJECT}}:/vol_data
 
# Allow LED to be written. This is application specific
# and should be changed depending on your needs.
add_volumes /sys:/sys
 
add_args -it
# uncomment to allow using Secure Element within the container.
# add_devices "${AT_SE_PARAM%:*}"
 
# launch app
set_command ./vol_app/src/main.sh

./vol_app/src/main.shの内容

#!/bin/sh
touch /home/atmark/connectd_log
# remoteitのイニシエータ機能を使用してターゲットにP2P接続
/usr/share/remoteit/connectd -p XXXX YYYYY ZZZZ > /home/atmark/connectd_log &

【コンテナイメージのリンク】
https://hub.docker.com/layers/remoteit/remoteit-agent/latest/images/sha…

原因としてはremoteit-agentのコンテナイメージにCMDで設定されているデフォルトのコマンドが
set_commandにより上書きされて動作しなくなるからだと考えております。

上記について回避策があれば教えていただきたく。

コメント

佐藤です。

> 上記について回避策があれば教えていただきたく。
set_command で実行している main.sh の方に CMD の内容 /remoteit-run.sh /sbin/init
書くとどうでしょうか。

main.sh に CMD の内容 /remoteit-run.sh /sbin/init を書いてみたところ、
config.jsonというファイルがコンテナ内の/etc/remoteit/内に作成されるようになりました。
一方で、remoteitのアカウント上でデバイスのオンライン状況は確認できず、ターゲット機能が動作できていないようです。

追記になりますが、コンテナ内に入って/remoteit-run.sh /sbin/init を直接打ったところ以下の結果が返ってきました。

/remoteit-run.sh /sbin/init 
rm: can't remove '/etc/conf.d/demuxertouch': No such file or directory
rm: can't remove '/etc/conf.d/remoteit-main': No such file or directory
init: must be run as PID 1

佐藤です。

少し手間ですが、ATDEのVScodeの環境で以下の手順を実行してみてください。

"container/resources_alpine/etc/local.d" を追加

[ATDE]$ mkdir container/resources_alpine/etc/local.d

そこに、"main.start" を追加し実行権を付与

[ATDE]$ touch container/resources_alpine/etc/local.d/main.start
[ATDE]$ chmod +x container/resources_alpine/etc/local.d/main.start

"main.start" を開き、内容は "main.sh" と同じものにする。
(CMDの内容は追加しない)

"Dockerfile" を開き "RUN adduser -D -u 1000 atmark" の下辺りに以下を追加

RUN rc-update add local default

"app.conf" に set_command は記載しない。

swuを作成しインストール

これで、remoteit コンテナ起動時に "main.start" に書かれた内容が実行されるかと思います。

教えていただいた通り実施してみたところ無事に動作しました。
ありがとうございました。