[TorizonCore-Builder] in a Proxy environment

TorizonCore-BuilderをProxy環境下で起動し[bundle]を実行したところ下記のエラーが発生しました。原因、対応方法を教えてください。

PROXYの設定は下記の箇所にて定義済
$HOME/.bashrc
$HOME/.docker/config.json
/etc/environment
/etc/systemd/system/docker.service.d/http-proxy.conf
/etc/default/docker

Qtアプリ(XXX)の[Create-production-image]は正常に終了し実機デバッグが実施できることは確認しています。

<実行コマンド>
$torizoncore-builder bundle --dind-param=“–insecure-registry=localhost:5002” XXX/docker-compose.prod.yml --bundle-directory bundle

<結果表示>
Starting DIND container
Using Docker host “tcp://127.0.0.1:22376”
Connecting to Docker Daemon at “tcp://127.0.0.1:22376”
Fetching container image torizon/weston-vivante:3
Stopping DIND container
Error: container images download failed: 500 Server Error for https://127.0.0.1:22376/v1.40/images/create?tag=3&fromImage=torizon%2Fweston-vivante: Internal Server Error (“Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)”)

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


The error message you are encountering suggests that there is a timeout issue when trying to fetch the container image torizon/weston-vivante:3 from the Docker registry. This could be related to the proxy settings not being correctly applied to the Docker daemon or the TorizonCore Builder tool.

Here are a few steps you can take to troubleshoot and potentially resolve the issue:

  1. Verify Proxy Settings: Ensure that the proxy settings are correctly configured and applied to all necessary components. You’ve mentioned setting them in several places, but double-check that they are correctly formatted and active.

  2. Docker Daemon Configuration: Make sure that the Docker daemon is correctly configured to use the proxy. You can verify this by checking the Docker service configuration files and ensuring that the proxy settings are correctly applied.

  3. Network Connectivity: Check if there are any network issues or restrictions that might be causing the timeout. Ensure that the machine running the TorizonCore Builder tool has proper access to the internet and can reach the Docker registry.

  4. Increase Timeout: If the network is slow, consider increasing the timeout settings for Docker to allow more time for the connection to be established.

  5. Local Registry: If you are using a local registry (localhost:5002), ensure that it is correctly set up and accessible. Also, verify that the --insecure-registry parameter is correctly applied.

  6. Test Without Proxy: If possible, try running the command without the proxy to see if the issue persists. This can help determine if the proxy is the root cause of the problem.

If these steps do not resolve the issue, you may need to consult additional resources or support specific to your network and proxy configuration.

Please, also check if these links can help you solve your problem:

TorizonCore Builder can't download toolchain because of proxy.

以下のコマンドも試しましたが結果は同じでした
$ source tcb-env-setup.sh – --network=host --env http_proxy=“http://<サーバ名>:” --env https_proxy=“http://<サーバ名>:” --env no_proxy=“localhost,127.0.0.1”

またプロキシを使用しない環境では正常に動作していることは確認済です

@katsu ご連絡ありがとうございます。

以下は2つの仮説です:

  1. 127.0.0.1がすべてのプロキシ設定で正しく除外されていない

情報を確認したところ、Dockerレジストリはlocalhost(127.0.0.1)にあり、NO_PROXYでこのアドレスが正しく設定されているため、localhostはプロキシから除外されるはずです。しかし、呼び出しがまだ失敗しています。もしプロキシ設定なしでこの呼び出しが成功するなら、呼び出しがプロキシを通過しており、そのために失敗していると考えられます。(プロキシ内でlocalhostの呼び出しがプロキシ自体にルーティングされている可能性があります。)

127.0.0.1はNO_PROXYによってプロキシを経由しないはずですが、Docker in Docker(DIND)や環境変数の伝播に関連する問題によって、この設定が機能しない可能性があります。特にDIND環境内のDockerデーモンがNO_PROXY設定を正しく認識し、127.0.0.1への接続を適切に処理していることを確認する必要があります。

プロキシがまだ関与している可能性のある理由

  • NO_PROXY設定の誤り
    NO_PROXYが正しく設定されていれば機能するはずですが、NO_PROXYが必要なすべての環境、特にDockerデーモン、Dockerクライアント、スクリプト(例: tcb-env-setup.sh)で正しく設定されているか、再確認する価値があります。
    一部のDockerのバージョンや設定では、localhostや127.0.0.1がグローバルに含まれていても、NO_PROXYの値を明示的に指定する必要がある場合があります。
  • プロキシ設定の伝播
    プロキシ設定が複数の場所(例: /etc/environment、~/.bashrc、Dockerの設定ファイル)で定義されている場合、NO_PROXY変数がすべてのコンテキストで正しく認識されていない可能性があります。例えば、Dockerがsystemd上で実行されている場合、ユーザーシェルで設定された環境変数がデーモンに反映されないことがあり、明示的にDockerデーモンの設定に渡す必要があります。

Dockerのクライアントとデーモンが127.0.0.1を正しく除外するように、両方が適切に設定されているか確認する価値があります。特に以下のファイルを確認してください:

  • $HOME/.bashrc
  • $HOME/.docker/config.json
  • /etc/environment
  • /etc/systemd/system/docker.service.d/http-proxy.conf
  • /etc/default/docker

ネットワークの確認
tcpdumpやDockerのデバッグモードなどのツールを使って、127.0.0.1へのリクエストがまだプロキシを通っているかどうか確認することも検討してください。

  1. DINDでlocalhost / 127.0.0.1が異なる意味を持つ可能性

設定によっては、127.0.0.1がDINDコンテナ内のlocalhostを指すとは限りません。DIND環境では、外部ホストの127.0.0.1が内部コンテナ内の別のアドレスを指すことがあります。これにより、127.0.0.1がNO_PROXYに設定されていても、DINDコンテナ内でそのアドレスが異なる解釈をされ、プロキシ経由でルーティングされる可能性があります。

例えば、内部のDockerデーモンが127.0.0.1にアクセスしようとする場合、それが外部ホストのレジストリではなく、内部コンテナのlocalhostを指してしまうことがあります。

対応策

  • DINDのDockerホスト名設定を明示的に行う
    localhostの代わりに直接IPアドレスを使用する方法を試すことをお勧めします。すべてのコンテキストで正しいIPアドレスが使用されていることを確認するため、レジストリのIPアドレスを試してみるのがよいでしょう。
  • dockerのホスト名を使用する
    localhostの代わりにDockerホスト名を使う方法もあります。このユーザーも同様の問題を経験しています:こちらの記事が参考になるかもしれません。

以上、引き続きよろしくお願いいたします。
アルバロ。

ご連絡ありがとうございます。
大変恐れ入りますが、このプロキシを使用しない環境で
具体的な実行コマンドと結果表示を教えていただけますでしょうか。

@katsu

いくつかの更新情報をお伝えします。

Torizon Core Builder のバンドルコマンドは、お客様が行われているように --dind-param の設定を変更し、プロキシ情報(および関連するその他の Docker 情報)を含める必要があります。また、ローカル開発環境での Docker の設定変更は、DIND 環境には影響を与えないため、TCB にプロキシを適用する唯一の方法は --dind-param を介することとなります。

なお、DIND のプロキシ設定は Docker エンジン v23 以降で CLI 入力として利用可能となり、詳細はこちらで説明されています:dockerd | Docker Docs (3 番目のポイント)

現行の TCB バージョンで使用されている Docker エンジンは v19 であることを確認しました:torizoncore-builder/tcbuilder/backend/bundle.py at bullseye · torizon/torizoncore-builder · GitHub

現在、本社に確認し、お客様の側で Docker エンジンを更新していただくことが可能か、または近いうちにプロキシ対応のバージョンに Docker エンジンを更新する予定があるかどうかについて確認しています。

今後新たな情報が入り次第、随時お知らせいたします。

以上、引き続きよろしくお願いいたします。
アルバロ。

@katsu

TCBで以下の変更を適用することができました:DINDコンテナイメージのバージョンが25.0.3に更新されており、次回のTCB early-accessビルド(次週末予定)で反映される見込みです。また、http-proxyhttps-proxyno-proxyのCLIオプションが利用可能となっていることを確認してbundleコマンドのdind-paramオプションを通じて指定できます。

今回の変更で問題が解決するかどうかご確認いただければ幸いです。解決しましたら、本チケットをクローズさせていただければと思います。

何かご不明点がございましたらお気軽にお知らせください。

アルバロ。