RUN の診断コマンドの使用の確認

ビルドに必要なコマンドを実行し、対話型の診断は別途行ってください。

説明

RUN はイメージのビルド時に実行されます。top のように対話操作を想定するコマンドはビルドを停止させたり失敗させたりする場合があります。ps の出力はビルド時の状態であり、稼働中のサービスの状態ではありません。

診断ツール自体が禁止されるわけではありません。必要な非対話型のビルド診断は使用でき、ツールの実行とインストールは別の操作です。

想定される影響

  • 不要な診断がビルド時間を延ばしたり、自動ビルドを中断したりする場合があります。
  • ビルド時のプロセス情報を、稼働中のサービスの状態と誤解するおそれがあります。

対処方法

  • ビルドに不要な診断コマンドを削除し、必要な診断は操作なしで終了するように設定してください。
  • 稼働中のサービスは実行時に確認してください。RUN を削除しても、ベースイメージにインストール済みのツールは削除されません。

例

既存の Go 1.22 の例はビルドコマンドを比較します。実際のビルドにはサポート中の互換イメージと必要なソース・モジュールファイルを用意してください。

変更前

dockerfile
FROM golang:1.22

WORKDIR /app
COPY . .
RUN top
RUN ps -ef
CMD ["go", "run", "main.go"]

変更後

dockerfile
FROM golang:1.22

WORKDIR /app
COPY . .
RUN go build -o app .
CMD ["./app"]

補足:

  • 変更前: ビルド中に top と ps を実行します。top は非対話型ビルドに適さない場合があります。
  • 変更後: アプリケーションをビルドし、生成した実行ファイルを起動します。この変更だけで Go ツールがイメージから削除されるわけではありません。

参考資料