wit_akaiwa
2024年10月4日 10時02分
いつもお世話になっております。
ABOSをv3.20.3-at.3にバージョンアップしたところ、コンテナから「podman --remote stop」実行時に下記エラーが出るようになりました。
armadillo:~# podman exec -it mycontainer sh # podman --remote stop mycontainer2 Error: json: cannot unmarshal string into Go struct field InspectContainerConfig.Config.StopSignal of type uint
調べるとホストのpodmanとバージョンが違うため出るエラーのようです。
ホストのバージョン:5.0.3
コンテナのバージョン:3.0.1
ホストのpodmanをダウングレードしようと思っているのですが、問題ありますでしょうか?
コメント
wit_akaiwa
「Rest API へのアクセス権の管理」の項と「Rest API : コンテナ操作」の項に沿って設定してみましたが、以下のエラーが出ます。
# curl_rest -X POST https://host.containers.internal:58080/api/containers/mycontainer/stop curl: (7) Failed to connect to host.containers.internal port 58080: No route to host
confに
add_ports 58080:58080
を追加してみましたが駄目でした。
他に何を設定すれば良いのでしょうか?
koga
アットマークテクノの古賀(休日モード)です。
wit_akaiwaさん:
>「Rest API へのアクセス権の管理」の項と「Rest API : コンテナ操作」の項に沿って設定してみましたが、以下のエラーが出ます。
>
# curl_rest -X POST https://host.containers.internal:58080/api/containers/mycontainer/stop curl: (7) Failed to connect to host.containers.internal port 58080: No route to host
abos-web サービスが起動していないのかも知れません。
もし、PC のブラウザから ABOS Web に接続できることを確認済みでなければ、次のコマンドを実行してみてくださいませ。
# rc-service abos-web status
出力される status が "started" でない場合は、abos-web が起動していませんので、マニュアルの「ABOS Web を起動する」で説明している手順で abos-web サービを起動してから、再度試してみてください。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
abos-web サービスが起動していない状態だった場合、v3.20.3-at.3 へのアップデート前に使っていらした ABOS のバージョンが、ABOS Web の導入前のものだったか、あるいは、アップデート用の初期設定を行う initial_update.swu を作成された際に、abos-web のパスワードを設定されなかったのではないかと思います:
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
以上、ひとまずのコメントです。
wit_akaiwa
wit_akaiwa
at_shinya.koga
アットマークテクノの古賀です。
wit_akaiwaさん(2024年10月7日 15時43分):
>>ただ、「set_network host」を追加する前はcurlが使えていたのに、
>>「set_network host」を追加するとcurlが使えなくなっていました。
>すみません。勘違いでした。
>dockerfileを確認したらcurlが入ってませんでした。
>curlを追加してイメージを作り直して、正常に動く事が確認できました。
了解しました。
>「set_network host」が必要という事で良いでしょうか?
いえ。この設定なしでも使えるはずです。
実際、Armadillo-IoT A6E 付属のゲートウェイコンテナ(a6e-gw-container)で /bin/sh を対話モードで起動して、apk add で curl をインストールすれば ABOS Web の REST API 呼び出しができます。
a6e-gw-container.conf では、set_network host の設定は行っていません。
お使いのコンテナでは、コンテナ内でネットワーク関連の設定やサービスの実行などを行っていらっしゃるでしょうか?
wit_akaiwa
> お使いのコンテナでは、コンテナ内でネットワーク関連の設定やサービスの実行などを行っていらっしゃるでしょうか?
いえ、行っていません。
使っているコンテナはVSCodeの「Python New Project」から作ったコンテナです。
Dockerfileとconfを添付しておきます。
ファイル | ファイルの説明 |
---|---|
app.conf | |
Dockerfile.txt |
at_shinya.koga
アットマークテクノの古賀です。
返事を差し上げるのが遅くなってしまいました。
wit_akaiwaさん(2024年10月9日 16時46分):
>>お使いのコンテナでは、コンテナ内でネットワーク関連の設定やサービスの実行などを行っていらっしゃるでしょうか?
>
>いえ、行っていません。
>
>使っているコンテナはVSCodeの「Python New Project」から作ったコンテナです。
了解しました。
>Dockerfileとconfを添付しておきます。
これを見る限り、要因になりそうなものは、ないですね。
wit_akaiwaさん(2024年10月4日 14時31分):
>「Rest API へのアクセス権の管理」の項と「Rest API : コンテナ操作」の項に沿って設定してみましたが、以下のエラーが出ます。
>
# curl_rest -X POST https://host.containers.internal:58080/api/containers/mycontainer/stop curl: (7) Failed to connect to host.containers.internal port 58080: No route to host
curl のエラーが 'No route to host' ですから、host.containers.internal の名前解決は出来ており、配送可能な経路が見つからずにエラーする状況のようですね。
要因切り分けのために、このエラーが出る状況で、コンテナ内とコンテナ外(ABOS)で、それぞれ次のコマンドを実行して、その出力を教えて頂けますか:
・コンテナ内
# ip route
・コンテナ外
# ip route
# netstat -nplt | grep 58080
# iptables -S
'ip route' をコンテナ内と外でそれぞれ実行することで、それぞれのルーティングテーブルの内容が分かります。
'netsat -nplt | grep 5880' で は、TCP ポート 58080 で待ち受け(listen)しているプロセスの名前が分かります。abos-web が正常動作していれば、次のように出力されるはずです:
# netstat -nplt | grep 58080 tcp 0 0 :::58080 :::* LISTEN 1460/abos-web
最後に、'iptabes -S' でパケットフィルタ規則の一覧を出し、コンテナ内から abos-web への配送を阻害するものがないか見てみたいと思います。
お手数をかけますが、どうぞ宜しくお願いします。
at_shinya.koga
2024年10月4日 13時20分
アットマークテクノの古賀です。
wit_akaiwaさん:
>ABOSをv3.20.3-at.3にバージョンアップしたところ、コンテナから「podman --remote stop」実行時に下記エラーが出るようになりました。
...
>調べるとホストのpodmanとバージョンが違うため出るエラーのようです。
>ホストのバージョン:5.0.3
>コンテナのバージョン:3.0.1
おっしゃる通りです。ご不便をおかけしてしまい、恐縮です。
>ホストのpodmanをダウングレードしようと思っているのですが、問題ありますでしょうか?
はい。podmann をダウングレードせずに対応する方法がありますので、そちらをお使いくださいませ。
マニュアルの「Web UI から Armadillo をセットアップする (ABOS Web)」で紹介している ABOS Web の REST API を使えば、コンテナから他のコンテナを起動・停できます。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
つまり、podman --remote による podman の REST API ではなく、ABOS Web の REST API でコンテナからのコンテナ管理を行うことができます。
詳細は、マニュアルの上記の節にある、「Rest API へのアクセス権の管理」の項と「Rest API : コンテナ操作」の項をご覧ください。