Docker Desktopをv3.5.x~にバージョンアップすると、Remote-Containersでリモートホスト上のコンテナに接続できなくなる問題の対処法

# 問題の概要
<img src="https://img.shields.io/badge/Docker Desktop for Mac-3.5.1-2496ED.svg?logo=docker&style=plastic">　<img src="https://img.shields.io/badge/Docker Engine-20.10.7-2496ED.svg?logo=docker&style=plastic">　<img src="https://img.shields.io/badge/MacOS Big Sur-11.4-999999.svg?logo=apple&style=plastic">
Docker for Macのバージョンを3.4.0 -> 3.5.1に上げると、リモートサーバー上のコンテナにRemote-Containersで接続できなくなった。

その際のエラー内容は以下。

```
Error response from daemon: Mounts denied:
The path {$リモートホストでコンテナにマウントしようとしているディレクトリのパス} is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
```
リモートホストに接続しているはずなのに、なぜかローカル（Mac）上のDocker Desktopのエラーが発生している。

## 環境
諸事情でリモートホスト上（EC2）に開発用コンテナを立てており、VSCodeのRemote-Containers拡張機能でコンテナにssh接続して開発していた。図としてはざっくり以下のような感じ。

![スクリーンショット 2021-07-03 0.47.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261575/990cbc9e-e6b1-c254-5b0a-26ca6b3b0ef8.png)


リモートサーバーのDocker Daemonを使用するため、DOCKER_HOST環境変数でリモートのURLを指定していた。

```json:.vscode/settings.json
{
  "docker.host": リモートサーバーのSSH Protocol URL
}
```

# 解決策
Docker Desktopのバージョンアップによって変更されたデフォルトのdocker CLI contextを`desktop-linux`から`default`に戻すことで対処できる。

```bash
$ docker context use default
```

# 原因
2021-06-23にリリースされたDocker Desktop v3.5.0にて、**デフォルトのdocker CLI contextが`default`から`desktop-linux`へ変更**になっていた。そのため、環境変数`DOCKER_HOST`での動的な値の上書きができず、リモートのDocker Daemonにアクセスできなくなってしまっていた。

https://matsuand.github.io/docs.docker.jp.onthefly/docker-for-mac/release-notes/#docker-desktop-350

`docker context`とは何かというと、普段dockerコマンドなどで使用している**Docker CLI**がDocker Daemonとやりとりするために使用するUNIXソケットなどの情報を、ひとまとまりとして定義できるものらしい（ビルドコンテキストとは名前が似ているがまた別物）。

https://matsuand.github.io/docs.docker.jp.onthefly/engine/context/working-with-contexts/

Docker Desktop(version < 3.4.0)のデフォルトのdocker CLI contextだった`default` contextは、
> メモ: デフォルトのコンテキストは、手動で生成したコンテキストとは、多少違った動きをします。 デフォルトのコンテキストには、設定ファイルmeta.jsonが存在しません。 そしてその時点の設定に基づいて、動的に設定が更新されます。

とあり、環境変数DOCKER_HOSTで設定した値によって上書き出来ていたのだが、バージョンアップによりデフォルトのcontextが`desktop-linux`になったことにより、設定ができなくなったと思われる。

## 解決までの経緯
Remote-Containerのエラーログには、

```
Error response from daemon: Mounts denied:
The path {$リモートホストでコンテナにマウントしようとしているディレクトリのパス} is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
Use File sharing to allow local directories on the Mac to be shared with Linux containers.
This is especially useful for editing source code in an IDE on the host while running and testing the code in a container.
By default the /Users, /Volume, /private, /tmp and /var/folders directory are shared.
If your project is outside this directory then it must be added to the list.
Otherwise you may get Mounts denied or cannot start service errors at runtime.
```
という、「`{$リモートホストのディレクトリパス}`をコンテナにマウントしようとしているけど、そんなパスはDocker for Macのfile sharing設定で許可しているパスに存在しないよ」という旨が出力されていた。

1. リモートホストではなくて何故ローカルのDocker for Macのエラーが出ているんだ？という疑問
2. バージョンアップ前までは動いていたので、リリースノートを確認
3. デフォルトのdocker contextが変わっており、リモートのDocker Daemonに接続できていなかったことが発覚

という流れだった。

---

間違い、アドバイス等ありましたら教えていただけますと幸いです。

# 参考資料
https://matsuand.github.io/docs.docker.jp.onthefly/engine/context/working-with-contexts/

https://matsuand.github.io/docs.docker.jp.onthefly/docker-for-mac/release-notes/#docker-desktop-350