Local(local by flywheel)がDockerのTLS証明書エラーで起動できずにループする現象に対応

WordPressのローカル開発環境構築ツールの Local(local by flywheel)で発生したエラー対応の備忘録です。

    現象とエラー表示

    以下のようなエラー表示が出て、Localが再起動を繰り返す無限ループに陥り、立ち上がらないという状態になりました。

    スクリーンショット:Regenerating Docker Machine TLS Certificate

    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;
    

    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"
    
    シェア
    広告
    野良人 代表
    新免祥太
    1988年岡山生まれ。外食企業のWEB・EC担当を経験したのち、2013年12月より「野良人(のらんど)」の屋号で独立しWEBデザイン・プログラミングなどWEBサイト制作の工程全般を請け負っています。お気軽にご相談ください。
    <次の記事(2020/12/31)
    reCAPTCHA v3の認証エラー(timeout-or-duplicate)対応
    前の記事>(2020/09/22)
    WordPressのアーカイブページのタイトルにspanタグが表示される
    記事一覧