Dockerアップデートでデータベース(DB)が使えなくなる罠について

どうも、三町哲平です。

前回書いた[Docker3.0.0にアップデートしたら、なんか起動しなくなった件 - Qiita](https://qiita.com/TeppeiMimachi/items/14c4a411ab56cd5892c7)で、

> 話は、脱線しましたが、2.5.系にダウングレードする事で今回の3.0.0でのエラーに関しては間違いなく解決されています。2.5.0(別のエラー発生)に関しては、機会があれば記事にしますが、たぶん正攻法の様なやり方をしていないので、日記みたいにな記事になりそうで、書くかどうか迷っています。

...と書きましたが、前回記事を投稿したのが2020/12/12で、本日が2020/12/31の大晦日。

だいぶ日数が空いてしまいましたが、上記の__たぶん正攻法の様なやり方をしていない__やり方についてご紹介。

# 正攻法ではないやり方とは?
__1から環境構築__以上!!!

はい、本当にそれだけです。大したことないですね...。

でもこれだけでは駄目なので、もっと深いところまで突っ込むとするならば、
Docker-composeで環境を再構築した後に、Railsアプリの内容(MVCモデルの内容等)を完全復元するために、途中まで制作していた旧Railsアプリ→新Railsアプリへの移行が必要だと思うのですが、
その際にコピペしたファイルは

1. appディレクトリ全交換
2. testディレクトリ全交換
3. publicディレクトリ全交換
4. dbディレクトリ全交換
5. configディレクトリのdatebase.yml以外全交換

これでDBを一新して、同じRailsアプリの制作を行うことができました。

その他、アプリ名を変更の際は、
[Railsのアプリ名を変更して、GitHubのリポジトリ名を変更するまで - Qiita](https://qiita.com/TeppeiMimachi/items/d0176c4ec5d4b4fad895)を参考にしながら行えば問題ないはずです。

私の場合は、アプリ名を__illustrations__→__illustration__に微修正しましたので、アプリ名変更後、上記の1.〜5.を実行して復旧しました。


# どういうエラーが出たのか？

![スクリーンショット 2020-12-19 12.06.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/47d2f1bb-9608-2a5f-d26a-2d08e763a193.png)

再度になりますが、詳しくは前回の記事[Docker3.0.0にアップデートしたら、なんか起動しなくなった件 - Qiita](https://qiita.com/TeppeiMimachi/items/14c4a411ab56cd5892c7)を読んでほしいのですが、一部抜粋すると...

> 因みに私のDockerのバージョンは、
2.5.1→3.0.0(今回のエラー発生)→2.5.0(別のエラー発生)→3.0.1(2.5.0の時と同じエラーの為、対応中)
となっております。

...↑これの、__2.5.0(別のエラー発生)→3.0.1(2.5.0の時と同じエラーの為、対応中)__←この部分の__別のエラー__というのが、__PG::ConnectionBad__エラーになります。

ちなみにこの時は、環境再構築で対応したのですが、なんとその１週間後には、__3.0.2__という最新バージョンが出て、アップデートをするとまた、同じ__PG::ConnectionBad__が発生してしまいました。

## PG::ConnectionBadとは？

調べて見ると色々原因は出てきたのですが、要約すると__postgresqlへの接続が出来ませんよ！__というエラーです。先程まで使用できていたpostgresqlがDockerをアップデートすることで使えなくなる。これは、困りますよね...

## 結論
![スクリーンショット 2020-12-12 4.29.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/0fa36f2c-c5e3-54d6-9aa6-6bef759d0759.png)

__Docker Preference（設定） > Experimental Features > Use gRPC Fuse for file sharing をオフる（デフォルトではONになっています）__

結局これが答えなんですね。

これをすることで、データベースの接続が問題なくできて、__PG::ConnectionBad__が発生しません。

Use gRPC Fuse for file sharing　って何なんだろう？と思って、Google翻訳で調べたのですが、
__Use gRPC Fuse for file sharing　→　（日本語訳）実験的機能>ファイル共有にgRPCヒューズを使用__

う〜ん...イマイチ分かりませんね。

私が探した中では、[最近(2020/08)のDocker for Macのファイルアクセス遅い問題事情メモ - Qiita](https://qiita.com/takc923/items/7916bb539d533e3fc1ac)←コチラの記事が一番参考になったのですが、今回の件に直結する部分を抜粋の上、要約しますと

__gRPC-FUSEというファイルシステムが新たに導入されて、デフォルトではON状態なので、場合によっては、設定で古いやつ（osxfs）に切り替えて使用する。__

となります。
つまり、Use gRPC Fuse for file sharingをOFFにする使い方というのは、レガシーなやり方なんですね。いずれ変更する必要があるのかもしれませんが、それはまた後日ということで...。

# さいごに
ここである一つの疑問が私の中で生まれました。

まずこの記事は私個人の備忘録として書いた記事なので、内容は非常に伝わりにくかったと思いますが、さらに何の話？となり兼ねない事が前提での追記として、

前回の記事[Docker3.0.0にアップデートしたら、なんか起動しなくなった件 - Qiita](https://qiita.com/TeppeiMimachi/items/14c4a411ab56cd5892c7)の

> 因みに私のDockerのバージョンは、
2.5.1→3.0.0(今回のエラー発生)→2.5.0(別のエラー発生)→3.0.1(2.5.0の時と同じエラーの為、対応中)
となっております。

から、__2.5.0(別のエラー発生)__の所、この時点で

```:エラー画面
Cannot start service ec-cube: Mounts denied
ERROR: Encountered errors while bringing up the project.
```
↑このエラーは消えましたが、

![スクリーンショット 2020-12-19 12.06.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/47d2f1bb-9608-2a5f-d26a-2d08e763a193.png)
↑この__PG::ConnectionBad__エラーが発生したという意味で書いたのですが、

この時に念のため、
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/f868cfef-9ddb-7c18-51ce-76ad96d803ce.png)
__Use gRPC Fuse for file sharingは、OFF__にしているつもりでした。
しかし、Use gRPC Fuse for file sharingをOFFにしていた場合、今回の理屈で行くと、Dockerのバージョンが、2.5.0の時点で、__PG::ConnectionBad__は発生しなかったはずです。

私は思ったのですが、「Use gRPC Fuse for file sharingは、OFFにしている__つもり__でした。」の時に

![スクリーンショット 2020-12-31 12.10.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688029/9df39007-1495-aeab-8f7b-628188c13f40.png)
① Use gRPC Fuse for file sharingをOFFにする。
② Apply & Restartを押す。

この__② Apply & Restartを押す。__を忘れていただけなのでは、ないのでしょうか？

凄い初歩的なミスをしていました。