VSCodeでDocker内のpythonプログラムをデバッグする(Windos/Ubuntu)
Windows上のVSCodeからWindows上のDockerで動作しているコンテナ内のpythonプログラムをデバッグする方法。
ubuntu上のVSCodeからubuntu上のDockerで動作しているコンテナ内のpythonプログラムをデバッグする方法。
どちらもほぼ同じ手順でデバッグできる。
VScodeに拡張機能Python、Docker、Remote Containers をインストールしておく
ターミナルからコンテナ起動する
ソースの編集をしやすいように、ホストのフォルダを/work
に割り当てている。
いや、VSCodeで編集すれば問題ないんだけどさ…
いつも編集は別のエディタ使ってたりするとコンテナ内のファイルいじるのが面倒なので…
Windows
docker run -it --name py_test2 -v /m/work/zzz:/work python:3.8-buster /bin/bash
ubuntu
docker run -it --name py_test2 -v `realpath .`:/work python:3.8-buster /bin/bash
[!NOTE] コンテナを一度作成してあれば起動していなくても大丈夫らしい。
VScodeのリモートエクスプローラにコンテナが見える
[!NOTE] Remote SSHやRemote WSLがインストールされている場合はリモートエクスプローラ上部のドロップダウンリストからContainersを選択
対象のコンテナを右クリックしてAttach to Container
またはAttach in New Window
をクリック
Attaching to a container may execute arbitrary code
と言われるたら、変なコードが実行されないことが分かっていれば Got it
をクリック
[!NOTE] 一度開いたフォルダはその下にショートカットが表示されているので、そこから開けば手っ取り早い。
コンテナが開く
コンテナ内には拡張機能が入ってないので、必要な拡張機能をインストールする
エクスプローラでデバッグしたいフォルダを開いてソースを開く(VSCodeの設定によっては前回開いていたフォルダが開かれる)
表示→コマンドパレットでPython: Select Interpreter
で 使用するpythonを選択する。
このとき、必ずしも使用するpythonのpathが表示されているとは限らないので、
(逆にコンテナ内にないホスト側のものが表示されたりする😢)
表示されていない場合は+ Enter Interpreter path...
から使用するpythonを選択する。
上記イメージの場合、/usr/local/bin/python3
なので、これを設定。
[!NOTE] あらかじめコンソールで which python3 して調べておく
あとはローカルと同じようにデバッグできる。
コンテナとの接続を終了するときは
表示→コマンドパレットでRemote: Close Remote Connection
で終了する。
接続終了してもコンテナを停止しないので、別途停止処理を行う。
docker stop py_test2
こういうのもある。
(参照しているのはmicrosoft純正のサンプルらしい)
普通にDocker使うのと異なるファイルdevcontainer.json
を使うので、
便利なんだか不便なんだか…
Docker拡張機能なくても動かせた気がする。
https://python.kirikutitarou.com/2019/07/vs-code-docker-remote-container.html