php Editor Strawberry は、Docker を使用するときによくある問題、つまり「Docker イメージのロードに失敗しました」に遭遇することがあります。この問題により、Docker を使用してコンテナーを正常に構築および実行できなくなる可能性があります。ただし、心配しないでください。この問題には通常、複数の解決策があります。この記事では、Docker イメージを正常にロードし、この厄介な問題を解決するのに役立ついくつかの一般的な解決策を紹介します。あなたが初心者であっても、経験豊富な Docker ユーザーであっても、この記事が役立つことを願っています。
golang
、docker client
を使用して、.tar
形式のdockerイメージをロードしています。
// 関数: getimageidbyrepotag
リーリーgetimageidbyrepotag
常に fmt.errorf("リポジトリタグ付きイメージ ID: %s"、リポタグが見つかりません)
を返します。
また、docker image
を実行しても、イメージが読み込まれません。画像の読み込みがまだ終わっていないようです。
私の他のコードでは、Docker クライアント cli.imageload
はすぐに戻りますが、Docker イメージのロードには通常時間がかかります。 getimageidbyrepotag
をチェックする前に、通常は約 30 秒の待ち時間を追加します。この場合、待ち時間を追加しても役に立ちません。
ありがとうございます
いくつか質問があります:
err
を共有しているため、一部のエラー処理が失われる可能性があります
wg.wait()
tar
リーダーから読み取りを行っていますが、これは問題ありませんが、見つかった後は残りのバイト ストリームをパイプの中間にコピーします。 。したがって、docker
クライアントtar バイト ストリームを 2 回読み取らないようにするには、io.teereader を使用します。
これにより、tar アーカイブを読み取り、manifest
ファイルをスキャンするだけでなく、このストリームを完全に別の場所 (つまり、docker
クライアント) に書き込むこともできます。
teereader
:
画像の読み込みは、(パイプの代わりに) ここから読み取られます:
リーリー次に、archive/tar
リーダーをパイプから読み取るように変更します:
その後、io.copy
ブロックを削除できます:
tar 検査コードはストリーム全体を eof に読み取るためです。
補足事項 どちらかの goroutine からの潜在的なエラーをチェックするときに eof
が 1 つであると考えないようにするために、io.eof
を nil
にリセットするとよいでしょう。エラー:
以上がDocker イメージのロードに失敗しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。