🐋

VSCodeでDockerfileをデバッグしたかった話【Windows編】

に公開

Docker公式ブログによると、VSCodeを用いてDockerfileのデバッグが出来るようになったとのことです。
今までRUNコマンドごとにechoなどを挟んで動作確認していましたが、これが本当なら随分と楽になりそうです。

https://www.docker.com/ja-jp/blog/debug-docker-builds-with-visual-studio-code/

今回、この新機能を早速試してみましたが、私のWindows環境では期待通りには動作しませんでした。
本記事では、その設定手順と結果を共有します。

動作確認環境

本記事の内容は、Windows環境で確認しています。

  • Docker Desktop for Windows (4.48.0)
    • WSL2 integration 有効
    • buildx version: v0.29.1
  • Visual Studio Code (1.105.1)
    • Docker DX 拡張機能 (0.18.0)

公式ブログの要件にbuildxのバージョンが含まれているため、事前にDocker Desktopを最新版に更新しておくことをお勧めします。

準備:Docker DX 拡張機能のインストール

Dockerfileのデバッグには、Docker社が提供するDocker DX拡張機能が必要です。
(※従来のMicrosoft製 Docker 拡張機能とは異なるのでご注意ください)

VSCodeの拡張機能マーケットプレイスで「Docker DX」を検索し、インストールします。

インストールが完了すると、Dockerfile上でRUNなどの行の左側に、ブレークポイントを設置できるエリアが表示されるようになります。

デバッグ手順と試行錯誤

Docker公式ブログを参考に、デバッグを試します。
まず、デバッグ対象のDockerfileと、デバッグ構成ファイル.vscode/launch.jsonを以下のように用意しました。

Dockerfile

FROM alpine:3.20
WORKDIR /app
COPY . /app
RUN echo "hello"
RUN sleep 9999 && echo "done"

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Docker: Build",
      "type": "dockerfile",
      "request": "launch",
      "dockerfile": "Dockerfile",
      "contextPath": "${workspaceFolder}",
    }
  ]
}

typeに指定しているdockerfileは、Docker DX拡張機能によって提供されるデバッグ構成です。

Dockerfileを開き、ブレークポイントを設定します。私の環境では、行番号の左に赤い点が表示されました。

F5でデバッグ実行 → ブレークポイントで停止せず

この状態でF5キーを押しデバッグを開始しましたが、ブレークポイントでは停止しませんでした。
設定したはずの赤いブレークポイントのマークは、中空のグレーの円に変わり、デバッガーにアタッチできていない状態を示唆しています。
ソースと実行ファイルのバージョンが違う時によく見る光景ですが、パス設定などを見直しても、特に問題は見つかりませんでした。

回避策:stopOnEntry を試す

次に、launch.json"stopOnEntry": trueを追加し、Dockerfileの1行目で強制的に停止させてみました。

// launch.json (変更後)
...
      "request": "launch",
      "dockerfile": "Dockerfile",
      "contextPath": "${workspaceFolder}",
      "stopOnEntry": true
...

この設定では、デバッグ開始直後に処理が停止し、ステップ実行(ステップオーバー、ステップインなど)が可能になりました。デバッガーの機能自体は動作しているようです。
しかし、相変わらずブレークポイントはグレーアウトしたままで、指定した行で止めることはできませんでした。

ただ、この停止した状態からデバッガーの機能を使ってexecコマンドを実行し、ビルド中のコンテナのシェルに入ることはできました。これは中間イメージの状態を確認するのに役立ちそうです。

結論: Windows環境ではまだ時期尚早か

公式ブログのスクリーンショットがWindowsのものではなさそうなこと、そして今回の検証結果から、現時点ではDocker Desktop for Windows (WSL2 integration) 環境において、このデバッグ機能には何らかの制約がある可能性が考えられます。

ブレークポイントが機能しないのは残念ですが、stopOnEntryとステップ実行を組み合わせることで、ビルドの各ステップを追跡したり、execでコンテナ内を調査したりすることは可能です。

非常に期待できる機能なだけに、今後のアップデートでWindows環境でもスムーズに動作するようになることを願っています。

Discussion