ローカル(Windows)のVSCodeからリモートホスト(ubuntu)上のDockerコンテナ内のプログラムをデバッグする
Windows上のVSCodeからUbuntu上のDockerコンテナに接続してデバッグする方法。
UbuntuへのDockerインストール方法はこちら sudo なしで Docker動かせるようにしとく必要あり
UbuntuへのSSH接続の準備についてはこちら
[!NOTE] 一度接続すればリモートエクスプローラ(SSH TARGETS)に表示されるのでそこから接続しても良い。
リモートホスト上のプログラムをデバッグしたい場合はここでフォルダを開いてごちょごちょやればよい。
WindowsマシンにDocker desktop for windows が必要になるので、インストールしておく。
WindowsへのDockerインストール方法はこちら
CLIだけでよさそうなんだけど、CLIだけってのがどこかにあるのか分からんかったのでとりあえず全部入れた。
Docker Desktopは動いてなくて良いので、Exitして可。
普段から使わないならDocker Dashboardの設定のGeneralから「Start Docker Desktop when you log in」のチェックを はずしておけばOK。
コマンドプロンプト等で以下を実行
set DOCKER_HOST=ssh://«ユーザ名»@«ホスト»
docker ps -a
リモートホスト上のコンテナの状態が返ってくるか確認。
VScodeのsettings.json
に以下の一文を追加する。もちろん上で確認した内容で。
"docker.host": "ssh://«ユーザ名»@«ホスト»",
[!NOTE] ローカルにつなぎたいときはこの行をコメントアウト(
//
をつける)すればOK。
setting.json
はJSONファイルだけど、//
でコメントアウトできる。
[!NOTE] VScode settings.json の開き方
- メニュー ファイル→ユーザ設定→ 設定
- 設定画面の右上のボタン「設定(JSON)を開く」をクリック
または
- メニュー表示→コマンドパレット
- Preference: Open Settings(JSON) を選択
リモートホストに拡張機能 Docker と Docker Explorer をインストールしておき、 Dockerペインを開くとリモートホスト上のコンテナとかが見える
ここでは既にリモートホスト上でコンテナ作成済みとする。
(イメージからコンテナ作ったりDockerfileからBuildしたりできると思うけど、今はおいとく)
あとはリモート SSH や ローカルのDockerでのデバッグと同じ。
接続を終了する場合は
このとき、コンテナからだけでなく、リモートホストからも切断される。
リモートエクスプローラ(Containers)で接続するコンテナを右クリックし、「Attach to Container」または「Attach in New Window」を選択
(コンテナが起動されていなければ起動して)コンテナに接続される。
あんまりごちょごちょしなくて済むのでこっちの方がおススメかな。
通常Cockerコンテナ内のネットワークポートをホストや外部コンピュータからアクセスするには、
コンテナ作成時に-p (–publish) オプションで接続を受け入れるポート番号を指定する必要があるが、
VScodeから接続している場合は、Docker内のネットワークポートにVScodeが実行されているマシンからlocalhost:«ポート番号»で接続できる。
(アクセス遅いけど、ちょっと別のポート開けて試したい なんて時には便利)
ただし、これはDockerが動作しているホストコンピュータや他のコンピュータからはアクセスできない。
これらからアクセスするには-pオプションを指定する必要がある。
https://qiita.com/Yuki_Oshima/items/d3b52c553387685460b0
↑ここにある、「Remote-Containers: Open Folder in Container…」での手順はリモートホストに接続した状態では実行できないらしい。
どうしてもこのコンテナでデバッグしたい場合は、
一旦リモートホスト上でVSCodeを起動してコンテナを作成しておき、
その後ローカルPCからこのコンテナにアタッチするような手順をふめばデバッグできる。