localhostにつながらない!!はじめてのDocker Desktop for Mac

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番を使用するときも、同じように対話モードでトラフィックを許可してあげる必要があります。(自動モードのままだと接続がブロックされます)

おわり🏆

タグ
公開日