診断分析は、イメージビルドプロセス中の例外、潜在的なリスク、および最適化の機会を特定するのに役立つビルド診断機能を提供します。このトピックでは、ビルド診断のチェック項目と対応する解決策について説明します。
イメージビルド診断の概要
イメージビルド診断機能は、専門家の経験と通義千問大規模言語モデル(LLM)の機能を組み合わせて、専門知識と AI に基づくデュアル診断モードを形成します。このアプローチは、問題の根本原因を正確に特定し、修復の提案を提供することを目的としています。
イメージビルド診断機能を使用すると、Alibaba Cloud はお客様のイメージリポジトリに関する関連データ(イメージリポジトリ、イメージビルド構成、ビルドタスクログ、イメージビルド履歴に関する情報など)を収集します。機密データをイメージビルド構成に保存したり、ビルドタスクログに出力したりしないでください。詳細については、「使用上の注意」をご参照ください。
ビルド診断機能は以下で構成されています。
ルール検出: 命令チェックとエラーログ分析が含まれます。
根本原因分析: 特定された根本原因と修復の提案が含まれます。
コンテナイメージリポジトリの関連データを収集し、異常な状況を特定することにより、イメージビルド診断は詳細な例外診断を実行して問題の根本原因を突き止め、対応する解決策を提案します。
診断プロセス
イメージビルド診断は、まずコンテナイメージリポジトリに必要な関連データを収集し、次に詳細な例外診断を実行します。診断タスクが開始されると、診断プロセスは次の段階を経ます。
データ前処理: インスタンスの状態、リポジトリ構成、ビルドルール情報、ビルドログなど、診断に必要なデータを収集し、ビルドプロセスで発生した例外を迅速に分析します。
ルール検出: 収集されたデータに基づいて、ビルドプロセス中の例外、潜在的なリスク項目、および最適化の機会を分析します。
根本原因分析: 収集されたデータと検出項目に基づいて、問題の原因を自動的に分析し、修復の提案を提供します。

診断結果
診断結果には以下が含まれます。
修正が必要な項目: 例外の根本原因、修復の提案、および例外のローカライズが含まれます。
AI 診断: 例外の詳細に基づいて、ビルド命令または設定項目の詳細な分析を実行し、包括的な最適化の提案を提供します。
診断ルールと修復の提案を表示する
[イメージ] B[ビルド診断] ページで、[診断] をクリックします。次に、[イメージビルドタスクの選択] パネルで、以下のパラメーターを使用して診断するイメージビルドタスクの ID を選択します。
名前空間: イメージビルドタスクが属する名前空間。
イメージリポジトリ: イメージビルドタスクが属するイメージリポジトリ。
イメージビルドタスク ID: イメージビルドタスクの ID。
イメージビルドタスクの ID を選択した後、使用上の注意をよく読んで、[同意する] を選択し、[診断を開始] をクリックします。
診断が完了したら、修復の提案に基づいて対応する操作を実行できます。次の表に、一般的な診断ルール、例外の根本原因、および修復の提案を示します。
診断ルールグループ
診断ルール名
例外の根本原因
修復の提案
Dockerfile 構文検出
無効なポート定義
EXPOSE命令のポートまたはプロトコル形式が正しくありません。EXPOSE命令を使用してポートを公開する場合は、ポートの範囲が 0 ~ 65535 で、プロトコルが TCP または UDP であることを確認してください。コピー命令構文検出
複数のファイルをコピーする場合、宛先アドレスがディレクトリではありません。
宛先パスの形式がディレクトリであることを確認してください。
ビルドステージが存在しません
COPY命令で指定されたステージ名が存 在しません。COPY命令で指定するステージ名が、以前に定義したステージの名前であることを確認してください。重複したステージ名
重複したステージ名が使用されています。
各ステージに一意の名前を使用してください。
無効な最初の命令
最初の命令が
FROMまたはARG命令ではありません。最初の命令が
FROMまたはARG命令であることを確認してください。コンパイルエラー項目
Dockerfile のプリコンパイルエラー。
Dockerfile の構文エラーを修正するか、根本原因分析によって提供される修復の提案を待ってください。
コンパイル警告項目
Dockerfile のプリコンパイル警告。
Dockerfile の関連命令に注意してください。予期しない方法で実行される可能性があります。
イメーグタグ検出
ベースイメージタグが指定されていません
特定のイメージタグが指定されていません。
これにより、イメージビルドプロセス中に予期しないイメージタグが使用され、ビルド結果に影響を与える可能性があります。特定のイメージタグを指定することをお勧めします。
ベースイメージが存在しません
ベースイメージ名が正しくないか、存在しません。
ベースイメージ名を確認するか、存在する別のベースイメージを選択してください。
ランタイムエラー検出
コマンド実行エラー
コマンドラインの実行エラー。
Dockerfile で実行するように指定されたコマンドが正しいかどうかを確認するか、根本原因分析によって提供される修復の提案を待ってください。
コマンドが存在しません
実行するコマンドが存在しません。
Dockerfile で実行するように指定されたコマンドがベースイメージに存在することを確認してください。
ファイルが存在しません
ファイルコピーエラー。
Dockerfile の
COPYコマンドで指定されたファイルまたはディレクトリが存在するかどうかを確認してください。無効な命令検出
無効なコマンド検出
ビルドプロセス中に、
KillやShutdownなどのサポートされていない命令が使用されています。ビルドプロセス中に
KillやShutdownなどの命令を使用すると、セキュリティと安定性の問題が発生する可能性があります。これらの命令を削除してください。sudo コマンド検出
ビルドプロセス中に使用された
sudoコマンドが無効です。ビルドプロセスから
sudo命令を削除してください。アップロードステージでのエラーの検出
タグの競合
アップロードするイメージのタグが、リポジトリ内の既存のイメージタグと競合しています。
イメージタグが競合しています。リポジトリの不変イメージタグ機能を無効にするか、同じタグのイメージが繰り返しプッシュされないようにしてください。
イメージサイズの最適化検出
apt get命令の最適化項目apt update命令とapt install命令がビルド命令で分離されています。apt update命令とapt install命令を異なる命令に分離すると、イメージサイズが大きくなり、繰り返しビルドの効率が低下する可能性があります。apt get命令の最適化項目--no-install-recommendsパラメーターがapt-get install命令に追加されていません。--no-install-recommendsパラメーターをapt-get install命令に追加すると、イメージサイズを小さくするのに役立ちます。パッケージインストール命令の最適化項目
パッケージのインストール後にキャッシュがクリアされていません。
パッケージのインストール後にキャッシュをクリアすると、イメージサイズを小さくするのに役立ちます。たとえば、キャッシュをクリアするには、Ubuntu は
apt-get clean命令を使用し、Alpine はapk add命令に--no-cache and rm -rf /var/cache/apk/*命令を追加し、CentOS はyum clean命令を使用します。マルチステージコンパイル検出
マルチステージビルドを使用してコンパイル命令を最適化していません。
コンパイル命令を別々のステージに配置してコンパイルし、コンパイル結果をビジネスイメージにコピーすると、イメージサイズを小さくできます。
冗長な圧縮パッケージが存在します
ビルドプロセス中に使用された圧縮パッケージがクリアされていません。
圧縮パッケージのダウンロード、圧縮パッケージの抽出、および圧縮パッケージの削除の命令を同じ
RUN命令にまとめると、イメージサイズを小さくできます。ビルド命令の最適化検出
相対パス検出
WORKDIRが相対パスを使用しています。WORKDIR命令に相対パスを使用すると、システムが予期しない作業ディレクトリに切り替わり、ビルドが失敗する可能性があります。WORKDIRパスが正しいか、絶対パスを使用していることを確認してください。ルートユーザー検出
ビルドプロセス中にルートユーザーが使用されています。
ビルドプロセス中にルートユーザーに切り替えると、コンテナーの実行時にセキュリティの問題が発生する可能性があります。関連命令を削除してください。
パス切り替えの最適化検出
ビルドプロセス中に
cd命令が使用されています。ビルドプロセス中に
cd命令で指定された作業ディレクトリは、コンテナーランタイムでは有効になりません。WORKDIR命令を使用することをお勧めします。CMDとENTRYPOINTのオーバーライド検出ビルドプロセス中に複数の
CMD命令またはENTRYPOINT命令が使用されています。ビルドプロセス中に複数の
CMDまたはENTRYPOINT命令を使用すると、最後の命令のみが有効になります。最後の命令が使用したい命令であることを確認してください。