開発者向け

MacからDockerコンテナに接続できない

Mac上のDockerは、Linux仮想マシンの中でコンテナを実行します。macOSからコンテナに接続するには、ふつうはポートをlocalhostに公開します。

対象:現在のmacOSバージョンのDocker DesktopとOrbStack。確認日:2026年10月29日

症状

  • curl localhost:8080は失敗するが、コンテナの中ではサービスが動いている。
  • コンテナのIPアドレスにpingや接続ができない。
  • Macにdocker0インターフェイスが表示されない。
  • Linuxではサービスが動くのにMacでは動かない。

考えられる原因

  • ポートが公開されていない。-pがないと、Docker DesktopはポートをMacに転送しません。
  • Docker DesktopでのコンテナのIP。Docker Desktopに関するDockerのドキュメントによると、ブリッジネットワークにはホストから到達できません。
  • サービスがコンテナ内の127.0.0.1で待ち受けている。この場合、接続できるのはコンテナ自身だけです。
  • ポートの組み合わせが間違っている。-p 8080:80では、8080がMacのポートで、80がコンテナのポートです。

確認方法

  1. 実行中のコンテナと、その公開ポートを一覧表示します。

    docker ps

    出力PORTS列に0.0.0.0:8080->80/tcpのような組み合わせが表示されます。組み合わせがなければ、ポートは公開されていません。

  2. 1つのコンテナの公開ポートを表示します。

    docker port my-container
  3. イメージにwgetが含まれていれば、コンテナの中からサービスをテストします。応答があれば、サービスは動いています。

    docker exec my-container wget -qO- http://localhost:80
  4. Mac上でそのポートを待ち受けているプロセスを確認します。

    lsof -nP -iTCP:8080 -sTCP:LISTEN

解決方法

  1. ポートを公開してコンテナを起動します。最初の数字がMac側のポートです。

    docker run -d -p 8080:80 nginx
  2. Macから、localhostとMac側のポートで接続します。

    curl http://localhost:8080
  3. コンテナ内のサービスが127.0.0.1ではなく0.0.0.0で待ち受けるようにします。設定方法はそのサービスのドキュメントを参照してください。

  4. Mac側のポートが使用中なら、別のポートを選びます。Macでポートが使用中を参照してください。

  5. OrbStackでは、コンテナのIPアドレスやcontainer-name.orb.localの名前も使えます。

Kilobatを使う場合

  1. KilobatのチェックはMac上で実行されます。失敗しているコードがコンテナ内で動いている場合は--context containerを使います。レポートの最後に、コンテナ内で実行するコマンドが表示されます。

    kilobat why http://localhost:8080 --context container

よくある質問

Docker Desktopでコンテナにpingできないのはなぜですか?

Dockerのドキュメントによると、Docker DesktopではMacからLinuxコンテナへ通信をルーティングできません。代わりにポートを公開してください。

OrbStackでは違いますか?

はい。OrbStackのドキュメントによると、MacからIPアドレスや.orb.localの名前でコンテナに接続できます。

出典

出典は2026年10月29日に確認しました。manページはmacOSに付属のものです。「ターミナル」でman <name>を実行すると開けます。