イメージを 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.
同じタグでプッシュされた新しいイメージをアプリケーションで使用するには、 アプリケーションを更新 して、新しいタグ付きイメージを参照する新しいアプリケーション・リビジョンを作成する必要があります。
次のステップ
イメージのトラブルシューティングについて詳しくは、 イメージのデバッグ を参照してください。
イメージに関する考慮事項があるアプリ、ジョブ、およびビルドのトラブルシューティングについて詳しくは、以下のトピックを参照してください。
- アプリのトラブルシューティング-アプリの作成が失敗するのはなぜですか?
- アプリのトラブルシューティング-アプリの実行が停止したのはなぜですか?
- アプリのトラブルシューティング-アプリが作動可能にならないのはなぜですか?
- ジョブのトラブルシューティング-ジョブ実行が完了しないのはなぜですか?
- トラブルシューティング・ジョブ-CLI でジョブ実行をサブミットできないのはなぜですか?
- ビルドのトラブルシューティング-ビルドおよびプッシュのステップでビルドが失敗する
- ビルドのトラブルシューティング-一時ストレージの制限を超えるとビルドが失敗する
- ビルドのトラブルシューティング-ソース・ステップでビルドが失敗する