
M1 Macに乗り換えるに際し、ボトルネックになるのが開発環境。
2021年5月現在、VirtualBoxやVagrantはM1 Macで使うことができません。
だもんで、これまでの開発環境であるVirtualBox+Vagrant+Dockerから、Docker Desktopに切り替える必要があります。
で、とりあえずはじめてのDocker Desktopということでさわってみたのですが、初っ端からピンチ。localhostが表示されない。ンーー厳しい!
ともあれバッチリ解決したので記録として残しておきます
追記2021年6月22日
DockerイメージNginx-proxyの最新版をpullしてしまうとlocalhostの80番ポートにポートフォワードできなくなるので安直なアプデに注意|KYONOHALKYO
こういうパターンもある。
先に解決方法
- Mac標準のhttpdを終了させる
- ESET Cyber Securityのパーソナルファイアウォールの設定を変える
コンテナを起動しただけではアクセスできない
$ docker run -d -p 80:80 docker/getting-started
Docker Desktopを立ち上げて、ターミナルで上記コマンドを叩くと、コンテナが問題なく立ち上がります。
でも、80版ポート経由でアクセスすることはできません。あくまでコンテナが立ち上がるだけです。
80番ポートはMac標準のhttpdが使用しています。
ポートの使用状況を見てみましょう。
$ sudo lsof -i:80
Password:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 97 root 4u IPv6 0xd36176adad057e99 0t0 TCP *:http (LISTEN)
80版ポートを使ってますね。
終わらせるッッ!!!俺がッッ!!!””””httpd””””を!!!!
$ sudo apachectl stop
もう一度80番ポートの仕様状況を確認してみましょう
$ sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
OK。
さて、ここからが本番。
空いたはずの80番ポートですが、まだlocalhostは見えません。Railsコンテナの3000番ポートも同様です。
立ち上がるだけでアクセスはできません。
犯人はESET(ネタバレ有)
犯人は・・・・・・・・・・・・・・・・・あなたですね。ESETさん。

ESET CYBER SECURITY PROの設定からパーソナルファイアウォールを開きます。

試しにパーソナルファイアウォールを無効にしてみましょう。(良い子は真似しないでネ)

無効にする。

localhostにアクセスしてみましょう。

なるほど、つながりました。

さて、原因ははっきりしましたが、パーソナルファイアウォールを無効にしたままでは、安全にインターネッツを楽しむことはできないので、これを有効に戻してやる必要がありましょう。
ESETの設定
パーソナルファイアウォールを有効に変更。
右上の設定をクリック。

右上のフィルタリングモードを「対話モード」に変更します。
ダイアログでめっちゃ聞いてきます。
内向きのトラフィック、「アクションを記憶する(ルールを作成する)」を選択して「許可(左側のボタン)」をクリック

追加されました。

これで、パーソナルファイアウォールを有効にしたまま、Dockerコンテナにlocalhostでアクセスできます。
接続できるのを確認したらフィルタリングモードを「対話モード」から「自動モード」に戻しておきましょう。
ヨシ!
追記
今回許可したのは80番ポートだけなので、Railsコンテナなどで3000番を使用するときも、同じように対話モードでトラフィックを許可してあげる必要があります。(自動モードのままだと接続がブロックされます)
おわり🏆