VSCodeでDockerfileをデバッグしたかった話【Windows編】
Docker公式ブログによると、VSCodeを用いてDockerfileのデバッグが出来るようになったとのことです。
今までRUNコマンドごとにechoなどを挟んで動作確認していましたが、これが本当なら随分と楽になりそうです。
今回、この新機能を早速試してみましたが、私のWindows環境では期待通りには動作しませんでした。
本記事では、その設定手順と結果を共有します。
動作確認環境
本記事の内容は、Windows環境で確認しています。
- Docker Desktop for Windows (4.48.0)
- WSL2 integration 有効
-
buildxversion: 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