VScodeのRemote Development+Dev Containersでリモートコンテナに接続しようとしたらローカルのDockerが起動するようになってしまった


リモートのGPUサーバにDockerデーモンを立てて，そこに手元のPCから（docker desktopを起動して）VSCodeのRemote Development / Dev Containersで接続して，コンテナ内でコードを書いて実行しています．

# 正常な場合

通常は以下のようなログが表示されて，リモートサーバのコンテナにvscodeが接続されます．

```text:正常な場合にvscodeでshow logで表示される内容
[2023-03-30T07:08:06.858Z] Dev Containers 0.282.0 in VS Code 1.76.2 (ee2b180d582a7f601fa6ecfdad8d9fd269ab1884).
[2023-03-30T07:08:06.858Z] Start: Resolving Remote
[2023-03-30T07:08:06.858Z] Setting up container for folder or workspace: /foo/bar/dir
[2023-03-30T07:08:06.858Z] Host: ssh://my.ssh.ip.address
[2023-03-30T07:08:06.858Z] Local Docker: true
[2023-03-30T07:08:06.860Z] Start: Check Docker is running
[2023-03-30T07:08:06.860Z] Start: Run: docker version --format {{.Server.APIVersion}}
...
```

# ダメな場合

ところが，なぜか繋がらなくなってしまう現象が，謎のタイミングで発生します．
「繋がらなくなってしまう」というのは，vscodeが「ローカルの」PCのdockerのコンテナを起動してしまうのです．

その時のvscodeのログがこちら．

```text:ダメな場合にvscodeでshow logで表示される内容
[2023-03-30T07:08:06.858Z] Dev Containers 0.282.0 in VS Code 1.76.2 (ee2b180d582a7f601fa6ecfdad8d9fd269ab1884).
[2023-03-30T07:08:06.858Z] Start: Resolving Remote
[2023-03-30T07:08:06.858Z] Setting up container for folder or workspace: /foo/bar/dir
[2023-03-30T07:08:06.858Z] Context: desktop-linux
[2023-03-30T07:08:06.858Z] Start: Check Docker is running
[2023-03-30T07:08:06.858Z] Start: Run: docker version --format {{.Server.APIVersion}}
...
```

`Host: ssh://my.ssh.ip.address`という一行が出てこないので，sshが動いていない様子．

たまになったりならなかったり，誰かがなったり自分がなったり．一旦なったら直らない現象で，vscodeを再起動・再インストールしてもダメ，docker desktopを再起動・再インストールしてもだめ．直るときもあったりなかったり．OSもwinだったりmacだったりと，原因がつかめません．


# 直し方

で，あるとき上のログをよくよくながめてみたら，
```text:なんだこれは
[2023-03-30T07:08:06.858Z] Context: desktop-linux
```
という行があるので，contextというのを調べてみたら，これが原因でした．


```bash:ダメな場合はcontextがdesktop-linuxになってる
$ docker context ls               
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                KUBERNETES ENDPOINT   ORCHESTRATOR
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                          swarm
desktop-linux *     moby                                                          unix:///Users/tamaki/.docker/run/docker.sock                         
```

正常に接続できている場合には，以下のように表示されます．

```bash:正常な場合にはcontextがdefaultになっている
$ docker context ls         
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                KUBERNETES ENDPOINT   ORCHESTRATOR
default *           moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                          swarm
desktop-linux       moby                                                          unix:///Users/tamaki/.docker/run/docker.sock                         
```


変更するには以下のようにします．

```bash:contextをdefaultに変更
$ docker context use default      
default
Current context is now "default"
```

これでvscodeで無事リモートサーバのコンテナに接続できるようになりました．


# 原因

直し方は分かったので問題は解決したのですが，なぜcontextがdefaultでなくなってしまうのかは謎のまま．

docker desktopをアップデートするとcontextが変わってしまう，という問題があったらしいのですが，それが原因だったかどうかは不明．

https://qiita.com/sho-hata/items/54594d9bba9c5866a60b