Local(local by flywheel)がDockerのTLS証明書エラーで起動できずにループする現象に対応
WordPressのローカル開発環境構築ツールの Local(local by flywheel)で発生したエラー対応の備忘録です。
現象とエラー表示
以下のようなエラー表示が出て、Localが再起動を繰り返す無限ループに陥り、立ち上がらないという状態になりました。
Regenerating Docker Machine TLS Certificate
Local detected invalid Docker Machine TLS certificate sand is fixing them now
Local が Docker を実行する際に TLS 証明書のエラーが発生したので証明書を再生成せよ、という意味合いのようです。
原因
3.X系の Local by Flywheel と 5.X 系の Local を同時に立ち上げた後に発生したので、おそらく以下の記事にあるように Docker を複数起動させたことに起因するエラーではないかと思います。
Docker は正直ぜんぜん分かっていないので、今回のようにトラブるとつらい。
Mac OS での対応
Mac OS の場合は公式フォーラムのトピックで、以下の対応が案内されています。
alias local-docker-machine="/Applications/Local\ by\ Flywheel.app/Contents/Resources/extraResources/virtual-machine/vendor/docker/osx/docker-machine"
local-docker-machine stop local-by-flywheel; rm -rf ~/.docker/machine/certs; local-docker-machine create local-cert-gen; local-docker-machine start local-by-flywheel; local-docker-machine regenerate-certs -f local-by-flywheel; local-docker-machine rm -f local-cert-gen;
- Regenerating Docker Machine TLS Certificate, checking system won’t start – Support – Local Community
Windows での対応
調べても直接的な解法は出てこないので、Mac OS のものを参考にコマンドプロンプトでやります。
なお、事前にlocal by flywheel は閉じておきます。
docker-machineのフォルダに移動
cd %USERPROFILE%\AppData\Local\Programs\local-by-flywheel\resources\extraResources\virtual-machine\vendor\docker\windows\
※ファイルの場所が異なる場合は適宜変更。
メモ
「docker-machineのフォルダに移動」を試す前に、Mac OS での対応を参考にエイリアスを通す方法を以下のようにdoskeyコマンドで試みました。エイリアスは通ったものの、そのあとの操作がうまくいかなかったので、該当のフォルダに移動して作業する方法をとりました。うまくいかなかったのは何かやり方がまずかったのかもしれない…。
doskey local-docker-machine=%USERPROFILE%\AppData\Local\Programs\local-by-flywheel\resources\extraResources\virtual-machine\vendor\docker\windows\docker-machine.exe
証明書を再生成する
docker-machine.exe stop local-by-flywheel
rd /s /q %USERPROFILE%\.docker\machine\certs
docker-machine.exe create local-cert-gen
docker-machine.exe start local-by-flywheel
docker-machine.exe regenerate-certs -f local-by-flywheel
docker-machine.exe rm -f local-cert-gen
- 2行目に関しては、
C:\Users\{ユーザー名}\.docker\machine\certs
のディレクトリを削除するという処理なので、コマンドでうまくいかなければエクスプローラーから消しても構わないと思います。 - 最後の行は
"local-cert-gen" does not exist
とか言われて失敗していますが、まあ無いならそれでいいのでしょう。
結果
立ち上げると無事動きました。ひと安心。おかげさまで開発がまる1日くらい止まりました。よかったですね。
特にWindowsでの対応方法がネット上で発見できなかったので、この記事が何らかの役に立てば嬉しいです。
最後にコマンドプロンプトの結果をまるっと載せます。なお certs ディレクトリは、この成功パターンに辿り着く前の試行錯誤で消してあったので、以下では削除の工程が省略されています。
C:\Users\username>cd %USERPROFILE%\AppData\Local\Programs\local-by-flywheel\resources\extraResources\virtual-machine\vendor\docker\windows\
C:\Users\username\AppData\Local\Programs\local-by-flywheel\resources\extraResources\virtual-machine\vendor\docker\windows>docker-machine.exe stop local-by-flywheel
Stopping "local-by-flywheel"...
Machine "local-by-flywheel" is already stopped.
C:\Users\username\AppData\Local\Programs\local-by-flywheel\resources\extraResources\virtual-machine\vendor\docker\windows>docker-machine.exe create local-cert-gen
Creating CA: C:\Users\username\.docker\machine\certs\ca.pem
Creating client certificate: C:\Users\username\.docker\machine\certs\cert.pem
Running pre-create checks...
(local-cert-gen) No default Boot2Docker ISO found locally, downloading the latest release...
Error with pre-create check: "Get https://api.github.com/repos/boot2docker/boot2docker/releases/latest: read tcp 192.168.10.102:53289->52.69.239.207:443: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond."
C:\Users\username\AppData\Local\Programs\local-by-flywheel\resources\extraResources\virtual-machine\vendor\docker\windows>docker-machine.exe start local-by-flywheel
Starting "local-by-flywheel"...
(local-by-flywheel) Check network to re-create if needed...
(local-by-flywheel) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(local-by-flywheel) Waiting for an IP...
Machine "local-by-flywheel" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
C:\Users\username\AppData\Local\Programs\local-by-flywheel\resources\extraResources\virtual-machine\vendor\docker\windows>docker-machine.exe regenerate-certs -f local-by-flywheel
Regenerating TLS certificates
Waiting for SSH to be available...
Detecting the provisioner...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
C:\Users\username\AppData\Local\Programs\local-by-flywheel\resources\extraResources\virtual-machine\vendor\docker\windows>docker-machine.exe rm -f local-cert-gen
About to remove local-cert-gen
WARNING: This action will delete both local reference and remote instance.
Error removing host "local-cert-gen": Docker machine "local-cert-gen" does not exist. Use "docker-machine ls" to list machines. Use "docker-machine create" to add a new one.
Can't remove "local-cert-gen"