kn_kobayashi
2023年3月20日 15時16分
お世話になります。
コンテナの起動や生存監視、停止を行うアプリをC言語で作っております。
そのアプリは、ホストOS上で動作させています。
定期的に「podman ps」を実行し、止まっていれば「podman_start」で立ち上げるような実装にしているのですが、
アプリから「podman_start」をすると以下の様な挙動となり、困っています。
※アプリは、C言語の「system("podman_start ~~")で実装しています
・コンテナを起動していない場合
→アプリから正常に起動できる
・コンテナを既に起動している場合(ホストOS上で手動でpodman_startをたたき、起動した後)
→1回目はアプリから起動できない、以下の様なエラーが出る。2回目は起動成功する。
WARN[0010] StopSignal SIGTERM failed to stop container sample_container in 10 seconds, resorting to SIGKILL 2023-03-17T18:47:17.000271293Z: kill container: No such process Error: cannot remove container 136bbfbd04f1de1aa3c9f3817b6c3bb63474ca81bd9ef2af204a6d45cb6ce52f as it could not be stopped: error sending SIGKILL to container 136bbfbd04f1de1aa3c9f3817b6c3bb63474ca81bd9ef2af204a6d45cb6ce52f: %!w(<nil>) error: Could not start 'sample_container'
また、アプリから起動成功した場合でも、その後ホストOS上で停止しようとすると、上記と同じエラーが起こりますOS
ホストOS上で「podman_start」を実行した場合、コンテナが起動していようが停止していようが成功するので、
アプリから呼ぶと何かまずいのでしょうか。
上記のエラーが発生する原因について、ご教授いただけないでしょうか。
コメント
kn_kobayashi
詳しい説明ありがとうございます。
なるほど。コンテナからコンテナの管理が出来たのですね。。
他にも、USBへのファイル保存、LED制御、本体の電源再起動等、本体に近い処理を多く行うアプリなので、
ホストOS側に実装していました。ただ、それらも、全てコンテナで出来そうでしたね。。
ただ、納期がもう来週のアプリなので、、作り変えは出来たらしたくないので、何とかこのままいきたいと思っていますが、
埒があかなそうでしたら、今週末ぐらいに作り替えを検討します。
「cat /etc/atmark-release; podman --version」の結果、以下です。
podman、「4.2.1」ですね。。
armadillo:/home/atmark# cat /etc/atmark-release; podman --version 3.16.3-at.6 podman version 4.2.1 armadillo:/home/atmark#
また、何回か試しているのですが、成功するときもありました。
凄く感覚的な話になり申し訳ないのですが、短時間の間にパンパンパンと実行したら、うまくいきます。
ある程度コンテナを起動した後に時間がたったりすると、失敗するようなイメージです。
また、アプリから・・・と申しましたが、もしかしたら、ホスト上からstartして、ホスト上からstopしても、起きたかもしれません。
至極単純に、以下の様なC言語のアプリで試してみても、再現します。
int main(){ system("podman_start sample_container"); return 0; }
コンテナ側は、sleep infinityしてるだけのコンテナでも、発生したと思います。
lighttpdを入れてるWEBサーバーのコンテナでよく発生します。
すみませんが、何か分かりましたら、情報お願い致します。
kn_kobayashi
追加の情報になります。
「kill container: No such process」が出る場合、そのコンテナにポートフォワードしていたポート番号もそのまま
「conmon」が握り続ける、という問題も発生しております。。
(これもなぜか起きるコンテナと起きないコンテナがあります。。
自前で作ったWEBサーバーコンテナは起きないのですが、podman load -i で、貰ったFTPサーバーコンテナは発生します。
たまたまたなのか、因果関係はよくわかりませんが)
例えばftpサーバーを入れてるコンテナのpodman stopに失敗すると、以下の様に、20が握られ続けます。
armadillo:/usr/local/datac/bin# netstat -atnp | grep :20 tcp 0 0 0.0.0.0:20 0.0.0.0:* LISTEN 19507/conmon armadillo:/usr/local/datac/bin#
この後killしても終了せず、kill -9で強制終了させないと、conmonは終了してくれませんでした。
※conmonを終了させてポート開放しないと、次回の「podman_start」で、ポートが使えずエラーになります。
関係あるのか分からないですが、解決したい課題ですので、よろしくお願いします。
at_dominique.m…
追加情報ありがとうございます。
podman 4.2.1 を確認してみましたが、同じ「コンテナがすでになくなった場合にエラーしない」実装なので謎のままです。
# コンテナで開発しなおす話は、時間あれば綺麗でしょうけど気持ちがすごく分かります。コンテナからは何でもできますが、手間がかかるので最初の開発時間とこれからのアップグレードの確認時間の取り合いですね。
# 一度開発してアップグレードしない製品も大量ありますので、個人的にはコンテナで開発して baseos を自動アップデートでもを使ってほしいと考えていますが、更新されているからって売れるわけじゃないので綺麗事ですね。ホストOSでも動くはずですので、解決しましょう。
再現ができました。
TERM が遅い場合は、片方(アプリかシェル)から podman_start を実行するときの podman stop が待っている時にもう片方に podman stop (かpodman_start)を実行するとこのエラーが表示されました。
abos 3.16.3-at.6 でしたら podman_start のコンフィグに set_init を使えると思いますので、「set_init yes」をコンフィグに追加してみていただけますか?
コンテナ内のプログラムが明確的に TERM を対応しないと podman stop が遅くなりますので、set_init を使うと代わりに term を対応してくれる小さい init が追加されます。
おそらくこれだけで再現率がかなり低くなると思います。
それでもダメでしたら、同時に podman_start を何回か実行できないようにしておかないといけません。
手っ取り早い対応としては コンフィグファイルに以下のロックを入れてみてください:
exec 3>/tmp/sample_container.lock flock 3
podman stop/kill を使わない限り(podman_start による再起動だけでしたら)ロックで守られます。
このロックに害はないと思いますので、更新(4月になると思いますが)で自動的にロックを追加しようと思います。
よろしくお願いします。
kn_kobayashi
ご回答、ありがとうございます。
コンフィグにset_init yesを入れてみたのですが、変わらず、、というよりset_initが効いていない感じでした。
おそらく「set_command」を設定しているからでしょうか?「/run/podman-init」が立ち上がっているようです。
※initを立ち上げるが、set_commandによるコマンドも実行したい、という場合はどうするのが最適でしょうか。
また、上記はコンテナ内のメインプログラムがTERMを対応できない(時間がかかっている)状態で、更に他からstopを呼ぶと、
再現するという前提だと思うのですが、コンテナ内に入ってメインプログラムに「kill」(SIGTERM)して、即座に終了しないこと自体、
数回試しましたがおこりませんでした。なので、中のメインプログラムがSIGTERMを受けて処理できていないという理由が
あっているのかな?ともちょっと思っています。コンテナ内に入ってkillするのと、podman stopで、何か違いがあったりしないでしょうか。
ちなみに、コンフィグ内に以下のコードを入れてみても、改善されませんでした。
※コンテナが起動した後も、停止した後も、/tmpの下にロックファイルが残り続けてましたが、あっているでしょうか。
exec 3>/tmp/sample_container.lock flock 3
また、すみません、今更の確認ですが、
「podman_start」で、対象コンテナが既に起動していて、そのコンテナが10秒以内に停止しなかった場合、
コンテナを停止だけはするが、起動はしない、という挙動になりますでしょうか。
#やはり、コンテナ内にもっていった方が早い?か、ちょっと迷い始めています。。
at_dominique.m…
kn_kobayashiさん
マルティネです。
> コンフィグにset_init yesを入れてみたのですが、変わらず、、というよりset_initが効いていない感じでした。
> おそらく「set_command」を設定しているからでしょうか?「/run/podman-init」が立ち上がっているようです。
> ※initを立ち上げるが、set_commandによるコマンドも実行したい、という場合はどうするのが最適でしょうか。
set_init は podman run のコマンドラインに --init を追加するだけで、set_command で指定したコマンドをこのまま実行します。set_command を使っている場合はデフォルトの「set_init auto」の設定で有効になっていると思います(具体的なコマンドが init でなければ)
ログメッセージ見て10秒以内に sigterm で停止できてなかったと勘違いしていた、すみません。
「早く終わらせて podman コマンドを短くすることで同時実行の確率を減らせないか」と思って、すでに早く停止していますね。
> また、上記はコンテナ内のメインプログラムがTERMを対応できない(時間がかかっている)状態で、更に他からstopを呼ぶと、
> 再現するという前提だと思うのですが、コンテナ内に入ってメインプログラムに「kill」(SIGTERM)して、即座に終了しないこと自体、
> 数回試しましたがおこりませんでした。なので、中のメインプログラムがSIGTERMを受けて処理できていないという理由が
> あっているのかな?ともちょっと思っています。コンテナ内に入ってkillするのと、podman stopで、何か違いがあったりしないでしょうか。
なるほど、こちらの環境で SIGTERM を無視させたことで同じエラーメッセージを出力させることはできましたが、原因は恐らく別、ですね。
> ちなみに、コンフィグ内に以下のコードを入れてみても、改善されませんでした。
> ※コンテナが起動した後も、停止した後も、/tmpの下にロックファイルが残り続けてましたが、あっているでしょうか。
はい、このやり方ではファイルが残ります。新しいファイルを作成しない方法もいくつかありますが、手っ取り早いテストとしては充分と思いました…が、改善無しですね。
確認ありがとうございました。
podman stop、または podman kill を別に使ってないと認識していますが、あってますか?
> また、すみません、今更の確認ですが、
> 「podman_start」で、対象コンテナが既に起動していて、そのコンテナが10秒以内に停止しなかった場合、
> コンテナを停止だけはするが、起動はしない、という挙動になりますでしょうか。
コンテナが10秒以内に TERM で停止されなかった場合は自動的に KILL で停止されて、コンテナを再起動させます。
KILL でも停止されなかった可能性もあります(カーネル内でハングしているなど)。その場合は確認してませんが、再起動されないと思います。普通のコンテナでは確率が低いと思いますが必要でしたらご確認ください。
> #やはり、コンテナ内にもっていった方が早い?か、ちょっと迷い始めています。。
試しに podman のサービスを起動させて podman_start --remote をホスト OS でも使えます。
これで解決されるかどうかの確認としてだけでもいいかもしれません。
とりあえず再現方法が間違っていたので、ログが出力される状況をもう少し調べてまた返事します。
よろしくお願いします。
kn_kobayashi
マルティネ様
回答、ありがとうございます。
>podman stop、または podman kill を別に使ってないと認識していますが、あってますか?
はい、使っておりません。
また、色々触っているうちに感じたこととして、停止しているコンテナに対する「podman_start」は全く問題なさそうです。
動いているコンテナに対し「podman_start」あるいは「podman stop」をしたときに止められないのが問題の様な感じです。
何度も何度も再現します。「No such process」がやはりおかしい気がします。
armadillo:/mnt/sd/csv/DMIN/20230318# podman stop sample_container WARN[0010] StopSignal SIGTERM failed to stop container sample_container in 10 seconds, resorting to SIGKILL 2023-03-22T08:52:49.000768050Z: kill container: No such process Error: error sending SIGKILL to container 1a0676f810bfff301e665f06b58a9a36606a5559e037a4c0064208ddb16e07f3: %!w(<nil>) armadillo:/mnt/sd/csv/DMIN/20230318#
ちなみにあえて10秒以内に終わらない様にした場合は、以下のようになります。これは正しいと思います。
armadillo:/mnt/sd/csv/DMIN/20230318# podman stop sample_container WARN[0010] StopSignal SIGTERM failed to stop container sample_container in 10 seconds, resorting to SIGKILL sample_container armadillo:/mnt/sd/csv/DMIN/20230318#
たまたま「10秒たった瞬間にコンテナが終了して、その後SIGKILLを送るから、No such process」が出るのかな・・・?とも思いましたが、
それにしては再現確率が高すぎる為(ある程度動かしてからpodman_startしたら必ず起きます)、違うと思っています。
また、同じ様なことを相談している掲示板がちらほら見つかりますが、何かヒントにならないでしょうか。
https://github.com/containers/podman/issues/15661
>> #やはり、コンテナ内にもっていった方が早い?か、ちょっと迷い始めています。。
> 試しに podman のサービスを起動させて podman_start --remote をホスト OS でも使えます。
> これで解決されるかどうかの確認としてだけでもいいかもしれません。
試してみます。。が、理解不足ですみません、ホスト側でpodmanサービス有効にしても、「/run/podman」の下には「sock」しかなく、
これをボリュームマウントして、コンテナ内でどうpodmanを操作するのでしょうか、、
armadillo:~# rc-service podman status * status: started armadillo:~# armadillo:~# ls /run/podman/ podman.sock armadillo:~# armadillo:~# podman_start --remote armadillo:~# ls /run/podman/ podman.sock armadillo:~# armadillo:~# podman exec -it sample_container sh / # podman sh: podman: not found / # ls /run/podman podman.sock / #
kn_kobayashi
追加の情報です。
podman stopでNo Such Processと表示されるコンテナをpsで表示すると、ゴミのようなものがたくさん残っていっているのがわかりました。
「datac_web_srvr」が該当コンテナです。(中でlighttpdを起動しているだけのコンテナです)
この「conmon」とはいったい何者なのでしょうか。。どうして残り続けるのでしょうか。
「podman stop」で停止時に異常発生するたび、このプロセスが増え続けていってるような気がします。であれば、これは「結果」に過ぎないですかね。
armadillo:/usr/local/datac/src/debug# ps -ef | grep datac_web_srvr 2122 root 0:00 /usr/bin/conmon --api-version 1 -c bbdf287cdeea1a836ad0fbab623fe06baa856c2534e5b89c1aab7c660f1e0a2c -u bbdf287cdeea1a836ad0fbab623fe06baa856c2534e5b89c1aab7c660f1e0a2c -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/bbdf287cdeea1a836ad0fbab623fe06baa856c2534e5b89c1aab7c660f1e0a2c/userdata -p /run/containers/storage/overlay-containers/bbdf287cdeea1a836ad0fbab623fe06baa856c2534e5b89c1aab7c660f1e0a2c/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/bbdf287cdeea1a836ad0fbab623fe06baa856c2534e5b89c1aab7c660f1e0a2c/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/bbdf287cdeea1a836ad0fbab623fe06baa856c2534e5b89c1aab7c660f1e0a2c/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/bbdf287cdeea1a836ad0fbab623fe06baa856c2534e5b89c1aab7c660f1e0a2c/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg bbdf287cdeea1a836ad0fbab623fe06baa856c2534e5b89c1aab7c660f1e0a2c 13770 root 0:00 /usr/bin/conmon --api-version 1 -c bf933d18d867984ca6eee0eeadb950fb97651e20d760ed837c75fcdcd88ed641 -u bf933d18d867984ca6eee0eeadb950fb97651e20d760ed837c75fcdcd88ed641 -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/bf933d18d867984ca6eee0eeadb950fb97651e20d760ed837c75fcdcd88ed641/userdata -p /run/containers/storage/overlay-containers/bf933d18d867984ca6eee0eeadb950fb97651e20d760ed837c75fcdcd88ed641/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/bf933d18d867984ca6eee0eeadb950fb97651e20d760ed837c75fcdcd88ed641/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/bf933d18d867984ca6eee0eeadb950fb97651e20d760ed837c75fcdcd88ed641/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/bf933d18d867984ca6eee0eeadb950fb97651e20d760ed837c75fcdcd88ed641/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg bf933d18d867984ca6eee0eeadb950fb97651e20d760ed837c75fcdcd88ed641 19471 root 0:00 /usr/bin/conmon --api-version 1 -c 99116fe9eb8dfb6e7dc78f67717573b98dcf05ad4d137b86d1164f8175ac1cfc -u 99116fe9eb8dfb6e7dc78f67717573b98dcf05ad4d137b86d1164f8175ac1cfc -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/99116fe9eb8dfb6e7dc78f67717573b98dcf05ad4d137b86d1164f8175ac1cfc/userdata -p /run/containers/storage/overlay-containers/99116fe9eb8dfb6e7dc78f67717573b98dcf05ad4d137b86d1164f8175ac1cfc/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/99116fe9eb8dfb6e7dc78f67717573b98dcf05ad4d137b86d1164f8175ac1cfc/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/99116fe9eb8dfb6e7dc78f67717573b98dcf05ad4d137b86d1164f8175ac1cfc/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/99116fe9eb8dfb6e7dc78f67717573b98dcf05ad4d137b86d1164f8175ac1cfc/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg 99116fe9eb8dfb6e7dc78f67717573b98dcf05ad4d137b86d1164f8175ac1cfc 20339 root 0:00 /usr/bin/conmon --api-version 1 -c e79217098b3eb9f580b0b7ad4d957cca8df137038dff06a318c6d75c4de48c7a -u e79217098b3eb9f580b0b7ad4d957cca8df137038dff06a318c6d75c4de48c7a -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/e79217098b3eb9f580b0b7ad4d957cca8df137038dff06a318c6d75c4de48c7a/userdata -p /run/containers/storage/overlay-containers/e79217098b3eb9f580b0b7ad4d957cca8df137038dff06a318c6d75c4de48c7a/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/e79217098b3eb9f580b0b7ad4d957cca8df137038dff06a318c6d75c4de48c7a/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/e79217098b3eb9f580b0b7ad4d957cca8df137038dff06a318c6d75c4de48c7a/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/e79217098b3eb9f580b0b7ad4d957cca8df137038dff06a318c6d75c4de48c7a/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg e79217098b3eb9f580b0b7ad4d957cca8df137038dff06a318c6d75c4de48c7a 21144 root 0:00 /usr/bin/conmon --api-version 1 -c 4660a92e4faf85705e54e6f065f58cbc5ee2e801aca7260c96f2559c93d45830 -u 4660a92e4faf85705e54e6f065f58cbc5ee2e801aca7260c96f2559c93d45830 -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/4660a92e4faf85705e54e6f065f58cbc5ee2e801aca7260c96f2559c93d45830/userdata -p /run/containers/storage/overlay-containers/4660a92e4faf85705e54e6f065f58cbc5ee2e801aca7260c96f2559c93d45830/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/4660a92e4faf85705e54e6f065f58cbc5ee2e801aca7260c96f2559c93d45830/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/4660a92e4faf85705e54e6f065f58cbc5ee2e801aca7260c96f2559c93d45830/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/4660a92e4faf85705e54e6f065f58cbc5ee2e801aca7260c96f2559c93d45830/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg 4660a92e4faf85705e54e6f065f58cbc5ee2e801aca7260c96f2559c93d45830 21569 root 0:00 /usr/bin/conmon --api-version 1 -c 190ba58a51e56776e501ab0bf3dc4175116b9b1a2a8b873e0ed63a66942e1465 -u 190ba58a51e56776e501ab0bf3dc4175116b9b1a2a8b873e0ed63a66942e1465 -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/190ba58a51e56776e501ab0bf3dc4175116b9b1a2a8b873e0ed63a66942e1465/userdata -p /run/containers/storage/overlay-containers/190ba58a51e56776e501ab0bf3dc4175116b9b1a2a8b873e0ed63a66942e1465/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/190ba58a51e56776e501ab0bf3dc4175116b9b1a2a8b873e0ed63a66942e1465/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/190ba58a51e56776e501ab0bf3dc4175116b9b1a2a8b873e0ed63a66942e1465/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/190ba58a51e56776e501ab0bf3dc4175116b9b1a2a8b873e0ed63a66942e1465/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg 190ba58a51e56776e501ab0bf3dc4175116b9b1a2a8b873e0ed63a66942e1465 23898 root 0:00 /usr/bin/conmon --api-version 1 -c 01d440508d61eddd572239d017b14569d911d977fc44e4b766056bf0ffa2440b -u 01d440508d61eddd572239d017b14569d911d977fc44e4b766056bf0ffa2440b -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/01d440508d61eddd572239d017b14569d911d977fc44e4b766056bf0ffa2440b/userdata -p /run/containers/storage/overlay-containers/01d440508d61eddd572239d017b14569d911d977fc44e4b766056bf0ffa2440b/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/01d440508d61eddd572239d017b14569d911d977fc44e4b766056bf0ffa2440b/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/01d440508d61eddd572239d017b14569d911d977fc44e4b766056bf0ffa2440b/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/01d440508d61eddd572239d017b14569d911d977fc44e4b766056bf0ffa2440b/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg 01d440508d61eddd572239d017b14569d911d977fc44e4b766056bf0ffa2440b 24234 root 0:00 /usr/bin/conmon --api-version 1 -c 339234018e95a32c9733edd8585201315024ce8688b8c117c4d8bc06a1790de3 -u 339234018e95a32c9733edd8585201315024ce8688b8c117c4d8bc06a1790de3 -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/339234018e95a32c9733edd8585201315024ce8688b8c117c4d8bc06a1790de3/userdata -p /run/containers/storage/overlay-containers/339234018e95a32c9733edd8585201315024ce8688b8c117c4d8bc06a1790de3/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/339234018e95a32c9733edd8585201315024ce8688b8c117c4d8bc06a1790de3/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/339234018e95a32c9733edd8585201315024ce8688b8c117c4d8bc06a1790de3/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/339234018e95a32c9733edd8585201315024ce8688b8c117c4d8bc06a1790de3/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg 339234018e95a32c9733edd8585201315024ce8688b8c117c4d8bc06a1790de3 24847 root 0:00 /usr/bin/conmon --api-version 1 -c 5e9947d43f93e06c9b502df7e4df40192f542e9a2dddff2b86c4d1c2540f7e62 -u 5e9947d43f93e06c9b502df7e4df40192f542e9a2dddff2b86c4d1c2540f7e62 -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/5e9947d43f93e06c9b502df7e4df40192f542e9a2dddff2b86c4d1c2540f7e62/userdata -p /run/containers/storage/overlay-containers/5e9947d43f93e06c9b502df7e4df40192f542e9a2dddff2b86c4d1c2540f7e62/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/5e9947d43f93e06c9b502df7e4df40192f542e9a2dddff2b86c4d1c2540f7e62/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/5e9947d43f93e06c9b502df7e4df40192f542e9a2dddff2b86c4d1c2540f7e62/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/5e9947d43f93e06c9b502df7e4df40192f542e9a2dddff2b86c4d1c2540f7e62/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg 5e9947d43f93e06c9b502df7e4df40192f542e9a2dddff2b86c4d1c2540f7e62 25118 root 0:00 /usr/bin/conmon --api-version 1 -c 1a0676f810bfff301e665f06b58a9a36606a5559e037a4c0064208ddb16e07f3 -u 1a0676f810bfff301e665f06b58a9a36606a5559e037a4c0064208ddb16e07f3 -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/1a0676f810bfff301e665f06b58a9a36606a5559e037a4c0064208ddb16e07f3/userdata -p /run/containers/storage/overlay-containers/1a0676f810bfff301e665f06b58a9a36606a5559e037a4c0064208ddb16e07f3/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/1a0676f810bfff301e665f06b58a9a36606a5559e037a4c0064208ddb16e07f3/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/1a0676f810bfff301e665f06b58a9a36606a5559e037a4c0064208ddb16e07f3/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/1a0676f810bfff301e665f06b58a9a36606a5559e037a4c0064208ddb16e07f3/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg 1a0676f810bfff301e665f06b58a9a36606a5559e037a4c0064208ddb16e07f3 25444 root 0:00 /usr/bin/conmon --api-version 1 -c d91822dadcdfabf59669e452051b0d9d034b059c5e4c8c77cdcc6ad08a8093b1 -u d91822dadcdfabf59669e452051b0d9d034b059c5e4c8c77cdcc6ad08a8093b1 -r /usr/bin/crun -b /var/lib/containers/storage/overlay-containers/d91822dadcdfabf59669e452051b0d9d034b059c5e4c8c77cdcc6ad08a8093b1/userdata -p /run/containers/storage/overlay-containers/d91822dadcdfabf59669e452051b0d9d034b059c5e4c8c77cdcc6ad08a8093b1/userdata/pidfile -n datac_web_srvr --exit-dir /run/libpod/exits --full-attach -l k8s-file:/var/lib/containers/storage/overlay-containers/d91822dadcdfabf59669e452051b0d9d034b059c5e4c8c77cdcc6ad08a8093b1/userdata/ctr.log --log-level warning --log-size-max 1000000 --runtime-arg --log-format=json --runtime-arg --log --runtime-arg=/run/containers/storage/overlay-containers/d91822dadcdfabf59669e452051b0d9d034b059c5e4c8c77cdcc6ad08a8093b1/userdata/oci-log --conmon-pidfile /run/containers/storage/overlay-containers/d91822dadcdfabf59669e452051b0d9d034b059c5e4c8c77cdcc6ad08a8093b1/userdata/conmon.pid --exit-command /usr/bin/podman --exit-command-arg --root --exit-command-arg /var/lib/containers/storage --exit-command-arg --runroot --exit-command-arg /run/containers/storage --exit-command-arg --log-level --exit-command-arg warning --exit-command-arg --cgroup-manager --exit-command-arg cgroupfs --exit-command-arg --tmpdir --exit-command-arg /run/libpod --exit-command-arg --network-config-dir --exit-command-arg --exit-command-arg --network-backend --exit-command-arg netavark --exit-command-arg --volumepath --exit-command-arg /var/lib/containers/storage/volumes --exit-command-arg --runtime --exit-command-arg crun --exit-command-arg --storage-driver --exit-command-arg overlay --exit-command-arg --storage-opt --exit-command-arg overlay.mountopt=nodev --exit-command-arg --events-backend --exit-command-arg file --exit-command-arg container --exit-command-arg cleanup --exit-command-arg d91822dadcdfabf59669e452051b0d9d034b059c5e4c8c77cdcc6ad08a8093b1 26519 root 0:00 grep datac_web_srvr
at_dominique.m…
kn_kobayashiさん、
> また、同じ様なことを相談している掲示板がちらほら見つかりますが、何かヒントにならないでしょうか。
> https://github.com/containers/podman/issues/15661
これは別だと思います。
どっちかというと、 https://github.com/containers/podman/issues/15492 が少しにていて、ちょうど 4.3.0 で修正されたので私の方で再現できてないかもしれません。
(すみません、古いバージョンをインストールするつもりでなかなか時間が見つかりませんでした…)
もし可能でしたら、以下のコマンドでアップデートしてくだされば解決されているかもしれません:
swupdate -d '-u https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-g4/image/baseos-x2-3.17.2-at.3.swu'
> > 試しに podman のサービスを起動させて podman_start --remote をホスト OS でも使えます。
> > これで解決されるかどうかの確認としてだけでもいいかもしれません。
>
> 試してみます。。が、理解不足ですみません、ホスト側でpodmanサービス有効にしても、「/run/podman」の下には「sock」しかなく、
> これをボリュームマウントして、コンテナ内でどうpodmanを操作するのでしょうか、、
すみません、私の説明が足りませんでした。
podman_start --remote <container|-a>
はただ /run/podman/podman.sock を使って、podman サービスのプロセスを通ってコンテナを管理しています。
なので、ホスト OS でも使いますが、コンテナの場合は add_volumes /run/podman:/run/podman
を入れてコンテナからホストの podman サービスと連絡がとれます。
その状態で apk add podman
でしたら podman --remote ps
でホストのコンテナの管理もできますし、コンテナの /etc/apk/repositories に https://download.atmark-techno.com/alpine/v3.17/atmark
を追加して apk add abos-base
で podman_start をインストールしたら podman_start のコマンドも使用可能になります。
とりあえずテストとして、ホスト OS のアプリに --remote を追加するだけで動作が変わるかもしれないのでそのつもりでしたが、上記の issue を見て何だか別の不具合かもしれないので、やっぱり古い OS を入れ直して確認したいと思います。
タイミングが急いでいるなかで申し訳ないですが、こちらは恐らく明日まで確認できないと思いますので、アップグレード可能であればとても助かります。
アップグレード後にファイルが消えたら、abos-ctrl mount-old で /target に前の rootfs がマウントできますので、問題の時に使ってください(/etc/swupdate_preserve_files に記載されてないファイルはコピーされてないので、ホストOSでアプリを動かす時に色々アップデート対応が必要ですね…紛らわしくてすみません。)
よろしくお願いします。
kn_kobayashi
マルティネ様
ご丁寧にご回答いただき、ありがとうございます。
取り急ぎ1点、分かったことがあるので連絡します。
コンテナを管理しているコンテナのアプリですが、内部で「SIGUSR1」をmaskし、使用する様にしていました。
以下の処理のうち、「SIGUSR1」をsigaddsetしないようにすると、現象が発生しなくなりました。
/* スレッドシグナルマスク設定 */ sigemptyset(&set); sigaddset(&set, SIGUSR1); sigaddset(&set, SIGALRM); pthread_sigmask(SIG_BLOCK, &set, NULL);
ということから、以下の様に考えました。
①アプリが起動し、「SIGUSR1」をpthread_sigmaskする
②その後、「system("podman_start XXX")」する
③podman_startの中(のpodman stop?)で、SIGUSR1を使う処理になっており、それをアプリが奪ってしまっている
④podmanサービスが、SIGUSR1が飛んでこず、該当コンテナが正しく終了したことを認識できていない
しかし、処理が中途半端に動き、実際には終了している
⑤その後、シェルで「podman stop」をすると、実際には終了しているが、podmanサービスが認識していないため、
そのようなプロセスは無い!と表示される…
…みたいなことが起きていれば、これまでの現象につじつまがあってくるのかと思いました。
取り急ぎ、「SIGUSR2」に変えると、動作することが確認できました。
まだこれから検証しますが、一旦それで進めたいと思いますので、古いバージョンに戻しての動作確認はしていかなくて大丈夫そうです。
ご丁寧に対応して頂き、ありがとうございました。
at_dominique.m…
2023年3月20日 15時56分
kn_kobayashiさん
お世話になっています、
マルティネです。
質問を答える前に少し事情を説明します。
> そのアプリは、ホストOS上で動作させています。
ホストOS で直接にアプリを動かすのは自由ですが、ABOS の領域にこれからのアップグレードでの動作についての保証は少ないので基本的にコンテナで実装することをおすすめします。
ホストの podman はコンテナからも扱い可能です。
「コンテナからのコンテナ管理」[1] の説明は少し短いですが、
rc-update add podman && persist_file -p /etc/runlevels/default/podman
で podman のサービスを有効にして、管理のコンテナのコンフィグにadd_volume /run/podman:/run/podman
を提供したら podman --remote でコマンドを実行できます。コンテナも alpine の場合に abos-base をインストールしたら、podman_start --remote も使えます。
[1] https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
> 定期的に「podman ps」を実行し、止まっていれば「podman_start」で立ち上げるような実装にしているのですが、
> アプリから「podman_start」をすると以下の様な挙動となり、困っています。
# ちなみに、podman_start のコンフィグファイルに
set_restart always
を設定すると自動リスタートします。#(デフォルトは、エラーコードで停止された場合のみに自動リスタートします)
> ・コンテナを既に起動している場合(ホストOS上で手動でpodman_startをたたき、起動した後)
> →1回目はアプリから起動できない、以下の様なエラーが出る。2回目は起動成功する。
すみません、このエラーに見覚えはないのでもう少し情報をください。
このログを読むと、kill(pid, TERM) の信号を送信できたので権利の問題でもないですし、その後は 100ms 毎に kill(pid, 0) でプロセスがまだ生きていることを10秒の間に確認したら最後の kill(pid, KILL) だけに ESRCH (No such process) のエラーをもらえましたが、最新の ABOS で使われている podman 4.3.1 ではその場合の ESRCH は成功扱いされるはずです(タイミングもそもそも驚きますね…)
なので、まずは現在使われている ABOS と podman のバージョンを提供していただけたらと思います:
cat /etc/atmark-release; podman --version
> また、アプリから起動成功した場合でも、その後ホストOS上で停止しようとすると、上記と同じエラーが起こりますOS
> ホストOS上で「podman_start」を実行した場合、コンテナが起動していようが停止していようが成功するので、
> アプリから呼ぶと何かまずいのでしょうか。
大丈夫だと思ってます(ました?)
podman_start は単純に podman run のコマンドを実行していますので、podman_start を実行している環境に影響は少しあります(例えば、ulimit の設定はそのまま残ります)。
でも detached で起動していますので、よくあるアプリから起動する場合の問題(tty がないなど)はないはずです、必要な場合に podman が新しい tty などを作ってからコンテナを起動しています。
# ちなみに、podman_start --remote を使う場合はそういう影響はなくなります。podman のサービスから起動されます。
なので、バージョンの情報をいただいたらもう少し再現できないか試したいと思います。
よろしくお願いします。