欲求としては以下みたいな感じ。
自分は今まではただ単にVSCodeのRemote SSH使ってました。Remote SSHは~/.ssh/configから設定読み込んで上の図の作業環境まで一発で繋いでくれるので楽です。
今回は繋ぎたい対象がコンテナなので、一工夫(?)必要です。
一応公式に書かれている方法とかあるんですが、自分みたいに踏み台重ねてたり、リモートの作業環境にグローバルIP割り振られてなかったりすると、使えないんですよね。 残念ながら。
ちなみに上記のサイトに
We recommend using the Visual Studio Code Remote-SSH extension to connect to a remote machine running Docker engine, ...
とか書かれていますが、コンテナ内にもsshサーバでも建てろという事なのだろうか。そんな事はしたくないゾ。
それではどうするかというと。ポートフォワーディングします。 基本的にコンテナとのやり取りはdocker deamonを介して行われます。 で、そのdocker deamonとのやり取りにはUnixドメインソケットが用いられてます。
ソケットが生えている先はデフォルトだとここ
/var/run/docker.sock
なので
Host XXX User YYY ProxyCommand ssh HUMIDAI -W %h:%p LocalForward 9999 /var/run/docker.sock IdentityFile ZZZ
とか設定しておくと、localhost:9999に接続すればリモートの作業環境の/var/run/docker.sock
に接続したのと同じ事になります。
この時点でssh XXX
で作業環境にssh張ってみて、以下のコマンド叩いてみましょう。
(shellでの操作は特にVSCode側に関係ありません、単にテストです)
PowerShellの場合
$env:DOCKER_HOST="localhost:9999" docker ps
bashの場合
export DOCKER_HOST="localhost:9999" docker ps
docker ps
でリモートの作業環境のdockerの稼働状況が表示されればOK。
VSCode側の設定します。 Remote - Containersを入れておきます。
で、VS Codeの中にあるdocker host
の設定をtcp://localhost:9999
とします。
で、その後Remote-Containers: Attach to Running Container...
を選択すれば、リモートの作業環境で動いているコンテナが表示されるので、選択すればめでたく接続されます。
まぁ、他にもやり方はあるっぽいんですが、ポートフォワーディングしてしまうのが最もシンプルな気がします。