イメージを Code Engine でプルできないのはなぜですか?
Code Engine アプリをデプロイしたり、ジョブを実行したりすると、「 Unable to pull the image 」という内容のエラーメッセージが表示されます。
この問題をトラブルシューティングするには、イメージが存在すること、およびイメージにアクセスできることを確認します。 以下の条件が満たされていることを確認してください。
-
アプリまたはジョブのイメージが存在するかどうかを確認するには、エラーメッセージを確認して、失敗の原因に関する情報を確認してください。
-
Code Engine でアプリケーションをデプロイしたり、ジョブを実行したりするには、まず、ランタイムライブラリなど、アプリケーションの実行に必要なすべてのランタイムアーティファクトを含むコンテナイメージを作成する必要があります。 コンテナイメージの作成には、 Code Engine で利用できる「コンテナイメージのビルド」機能を使ってソースコードからアプリをビルドする方法など、さまざまな方法があります。 イメージは、パブリックまたはプライベートのどちらのイメージ・レジストリーからでもダウンロードできます。 プライベート・レジストリーにアクセスする方法について詳しくは、プライベート・コンテナー・レジストリーへのアクセス権限の追加を参照してください。
-
Code Engine CLI で
ibmcloud ce app create、ibmcloud ce job create、またはibmcloud ce jobrun submitコマンドを使用する場合、アプリケーションまたはジョブに使用するイメージの名前をREGISTRY/NAMESPACE/REPOSITORY:TAGという形式で指定します。ここで、REGISTRYとTAGはオプションです。REGISTRYが指定されていない場合、デフォルトはdocker.io.です。TAGが指定されていない場合、デフォルトはlatestです。 イメージ・レジストリーの指定に使用するフォーマットについて詳しくは、これらのコマンドを確認してください。
問題を解決するには、以下の解決策を試してみてください。
-
権限がありません。 参照されている画像にアクセスする権限がない場合、アプリケーションの作成は完了せず、エラーが発生します。
Unable to pullというエラー・メッセージを受け取ります。-
参照されているイメージにアクセスできることを確認するには、イメージの場所を確認し、イメージにアクセスするための許可があることを確認します。
-
イメージが Docker Hub や IBM Cloud® Container Registryなどのコンテナー・イメージ・レジストリーにある場合は、レジストリー・アクセスを Code Engine に追加したこと、および正しいレジストリー・シークレットを使用していることを確認します。 コンテナー・イメージ・レジストリーでのイメージの処理について詳しくは、プライベート・コンテナー・レジストリーへのアクセス権限の追加を参照してください。
-
-
コンテナー・レジストリーの割り当て量を超えています。
ibmcloud ce jobrun events --jobrun JOBRUN_NAMEコマンドを実行して、ImagePullBackOffエラーを確認します。以下に例を示します。
ibmcloud ce jobrun events --jobrun myjobrun- システムイベントに表示されるエラーが以下のメッセージと類似している場合、このエラーはレジストリのクォータを超過していることを示しています。 プランのアップグレードを検討してください。 IBM Cloud® Container Registry サービス・プランおよび割り当て量制限について詳しくは、 IBM Cloud Container Registryについて を参照してください。
403 Forbidden - Server message: denied: You have exceeded your pull traffic quota for the current month. Review your pull traffic quota and pricing plan. -
コンテナー・レジストリーには認証が必要です。
- システムイベントに表示されるエラーが以下のメッセージと類似している場合、このエラーは、レジストリへのアクセス権がないか、または認証が必要な可能性があることを示しています。 その認証情報でレジストリへの適切なアクセス権限が与えられているか確認してください。
Failed to pull image "<image_name>": rpc error: code = Unknown desc = failed to pull and unpack image "<image_name:image_tag>": failed to resolve reference <image_name:image_tag>": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed. -
Code Engine でイメージがコンテナー・レジストリーに見つかりません。
このシナリオでは、イメージは存在し、レジストリー・アクセスは機能しますが、 Code Engine は、特定のアプリケーション・リビジョンに対して予期していたイメージとは異なるイメージを検出します。 コンテナー・レジストリー・イメージ・ダイジェストが、アプリケーション・リビジョンのイメージの予期されるダイジェストと一致しません。
アプリケーションや新しいアプリのリビジョンをデプロイする際、イメージにタグが指定されていない限り、参照されているコンテナイメージの最新バージョンがダウンロードされ、デプロイされます。 イメージにタグが指定されている場合、タグ付けされたイメージがデプロイメントに使用されます。
アプリケーションによって参照された元のイメージと同じタグを使用して新しいバージョンのイメージを作成すると、コンテナー・レジストリー内の元のイメージが上書きされます。 ただし、 Code Engine はこの新しいイメージを見つけることができません。新しいイメージのダイジェストがアプリケーション・リビジョンのダイジェストとは異なるためです。 特定のアプリケーション・リビジョンに関連付けられているイメージには固有のコンテナー・レジストリー・ダイジェストがあり、 Code Engine は、アプリケーション・リビジョンの存続期間中、このダイジェストを使用します。
元のイメージと同じタグを持つ新しいバージョンのイメージを作成すると、元のイメージはコンテナー・レジストリー内で上書きされ、タグ付け解除されます。 新しいイメージにはタグが付けられ、この新しいイメージには別のダイジェストがあります。 Code Engine アプリケーションは、この新しいイメージを使用しません。これは、新しいイメージのダイジェストが、アプリケーション・リビジョンによって参照されるイメージのダイジェストとは異なるためです。 最初に参照されたイメージがまだ存在する場合、 Code Engine は引き続きアプリケーション・リビジョンの新規インスタンスを作成できます。 アプリケーションによって最初に参照されたイメージが存在しない場合、 Code Engine は予期されたイメージ・ダイジェストを検出せず、アプリケーションはイメージをプルできないため失敗します。 イメージをクリーンアップして削除する場合、およびコンテナー・レジストリーの保存ポリシーを構成する場合は注意してください。 タグ付きイメージを上書きしても問題はありません。 ただし、タグ付けされていないイメージを削除する有効な保存ポリシーでイメージを上書きするか、タグ付けされていないイメージのクリーンアップを手動でトリガーすると、問題が発生する可能性があります。
システム・イベントのエラーが以下のメッセージと類似している場合、このエラーは、 Code Engine がレジストリー名前空間からイメージをプルできないことを示します。 イメージのタグが正しいイメージ・ダイジェストを指していることを確認します。
Unable to pull the image. Image "<image_name>" does not exist in the registry namespace. Check your registry repository and tag. If the image exists in the repository, check whether the specified tag points to the correct image digest.同じタグでプッシュされた新しいイメージをアプリケーションで使用するには、 アプリケーションを更新 して、新しいタグ付きイメージを参照する新しいアプリケーション・リビジョンを作成する必要があります。
-
Code Engine はコンテナ・レジストリを認証できない。
このシナリオでは、イメージは存在し、レジストリへのアクセスは機能し、構成されたレジストリ・シークレットは有効ですが、 Code Engine、コンテナ・レジストリを認証できません。 以下のようなエラーメッセージが表示されることがあります:
ErrImagePull : failed to pull and unpack image "<image name>": failed to resolve reference "<image name>": failed to authorize: failed to fetch oauth token: unexpected status from GET request to...アカウント
Restrict IP address accessを有効にしているかどうかを確認します(「 特定のIPアドレスを許可する 」を参照)。 有効にすると、許可されたIPアドレスのみが、 アカウント IBM Cloud®、認証できるようになります。 これにより、 Code Engine があなたのコンテナ・レジストリを認証できなくなり、あなたのイメージを引き出すことができなくなります。 Code Engine プロジェクトのpublicとprivateIP アドレスを追加する必要があります。 これらのIPアドレスを識別する方法については、 Code Engine パブリックIPアドレスとプライベートIPアドレスを 参照してください。
次のステップ
イメージのトラブルシューティングについて詳しくは、 イメージのデバッグ を参照してください。
イメージに関する考慮事項があるアプリ、ジョブ、およびビルドのトラブルシューティングについて詳しくは、以下のトピックを参照してください。
- アプリのトラブルシューティング-アプリの作成が失敗するのはなぜですか?
- アプリのトラブルシューティング-アプリの実行が停止したのはなぜですか?
- アプリのトラブルシューティング-アプリが作動可能にならないのはなぜですか?
- ジョブのトラブルシューティング-ジョブ実行が完了しないのはなぜですか?
- トラブルシューティング・ジョブ-CLI でジョブ実行をサブミットできないのはなぜですか?
- ビルドのトラブルシューティング-ビルドおよびプッシュのステップでビルドが失敗する
- ビルドのトラブルシューティング-一時ストレージの制限を超えるとビルドが失敗する
- ビルドのトラブルシューティング-ソース・ステップでビルドが失敗する