Oxcart ダウンロード
メニュー

Macのコンテナネットワーク:ポート、VPN、DNS、Little Snitch、TLS

MacではコンテナがMacのネットワークの内側にあるLinux環境で動くため、ポート、VPN、DNS、ファイアウォールの動作はコンテナアプリによる通信の中継方法で決まります。Oxcartはすべての外向き接続をMac自体から開くので、VPN、DNS、Little Snitchのルールがコンテナにも適用されます。Macとエンジン間のリンクはTLS 1.3で暗号化します。

更新日

Macのコンテナネットワークの仕組み

macOSはLinuxコンテナを直接実行できないため、MacのコンテナアプリはどれもLinux環境でコンテナを動かし、Macとの間で通信を中継します。重要なのは次の3つの経路です。

  • 内向き通信:Macで公開したポートからコンテナへ転送します。
  • 外向き通信:コンテナからインターネット、社内ネットワーク、Mac上のサービスに接続します。
  • 名前解決:コンテナがホスト名を検索します。

これらの経路がMac自身のネットワークを迂回すると、VPNルートが適用されず、社内ホスト名が解決できず、ファイアウォールも通信元のアプリを把握できません。Oxcartはそうならないように設計されています。

外向き通信:VPN、DNS、ファイアウォールをそのまま適用

Oxcartはコンテナとビルドステップから出るIPv4、IPv6のTCP通信をMacに転送し、Mac自身のソケットで接続を開きます。経路はVPNクライアントが追加したルートも含め、Macのルーティングテーブルで決まります。OxcartはMacのルート、VPN設定、ファイアウォール設定を変更しません。

アドレス検索(AとAAAA)は/etc/hostsやVPNが設定するリゾルバー選択を含むmacOSのシステムリゾルバーを使うため、社内ホスト名はブラウザと同じようにコンテナ内でも解決されます。コンテナ名はそれぞれのDockerネットワーク内に限定され、DNSはUDPとTCPの両方で動作します。

Little Snitch、LuLu、エンドポイントエージェント

ネットワークフィルターは確認を求める間、新しいプログラムの最初の接続を2秒ほど保留することがあります。Oxcartは待ちません。主リンクが確認できるまでは代替経路を使い、遅い接続や失敗した接続は自動的に切り替えます。3回連続で失敗するとリンクを30秒間停止してから再確認します。フィルターでOxcartを一度許可すれば、以後はそのルールが適用されます。

内向き通信:公開ポート

通常のDocker構文でポートを公開します。

# Mac loopback only (recommended for development)
docker run -d -p 127.0.0.1:8080:80 nginx

# Ephemeral host port, UDP
docker run -d -p 127.0.0.1::9000/udp my-udp-service

# IPv4 and IPv6 listeners on the Mac
docker run -d -p "[::]:8080:80" nginx

アドレスを指定しないバインドはMacのすべてのIPv4アドレスで待ち受けるため、macOSのファイアウォールで遮断されない限り、同じネットワークのほかのマシンからアクセスできます。TCPとUDPは同じホストポート番号を使えます。公開したリスナーはコンテナの停止時に解放されます。

公開ポートはエンジン自身のlocalhostでも応答するため、コンテナ内で動かすレジストリにイメージをプッシュできます。

docker run -d -p 127.0.0.1:5000:5000 --name registry registry:2
docker tag my-app localhost:5000/my-app
docker push localhost:5000/my-app

Portsビュー:ポートが応答しない理由

OxcartのPortsビューにはMac上のすべてのリスナーとコンテナポートがリポジトリ、ワークツリー、ブランチ別に表示されるため、同じプロジェクトの2つのチェックアウトを混同しません。各バインドは準備完了、待機中、エラーのいずれかで、理由も示されます。

  • Mac上ですでにそのアドレスが使われている。
  • コンテナ内のサーバーが127.0.0.1だけで待ち受けている。
  • そのポートではまだ何も待ち受けていない。

ほかのマシンからアクセスできるポートにはマークが付きます。コーディングエージェントもOxcartのMCP portsツールを通じて同じ情報を確認できます。AIコーディングエージェントのためのDockerをご覧ください。

コンテナからMacにアクセス

host.docker.internalはコンテナ内でもビルドステップでも名前解決でき、Macの127.0.0.1にバインドされたサービスにTCPで接続できます。Macでネイティブに動くデータベースや開発サーバーをコンテナから利用できます。

docker run --rm curlimages/curl http://host.docker.internal:3000/health

これは意図的に開いたアクセス経路として扱ってください。実行するどのコンテナも、この方法でMacのループバック上のサービスに接続できます。信頼できないコンテナを動かす間は、認証のない管理サービスを127.0.0.1に置かないでください。

Macとエンジン間の暗号化リンク

MacとLinux間の通信は、macOSが同じMac上のほかの仮想化ソフトウェアと共有する仮想ネットワークを通ります。Oxcartはこのリンク上の公開ポートと外向きのTCP通信をTLS 1.3(TLS_AES_128_GCM_SHA256)で包み、エンジン起動ごとに生成する証明書にピン留めし、起動ごとの256ビットbearerトークンを使います。無効なトークンでは接続を閉じ、Macのアドレス以外からの接続はTLS開始前にLinux側で閉じます。

これが防ぐのは、共有ネットワーク上のほかのソフトウェアがアドレスを偽装して通信を読んだり挿入したり、コンテナに新しい接続を開いたりする脅威です。ゲスト側のファイアウォールも、未公開のコンテナポートや内部リゾルバーへのアクセスを防ぎます。このリンクの暗号化にはコストがあり、私たちはそれを選びました。Docker API自体はネットワークを通らず、専用のUnixソケットを使います。ポートを公開していなければ、OxcartはMac上にTCPやUDPのソケットを保持しません。

現在の制限

  • ホストネットワークモード(--network host)とIPv6のコンテナネットワークは未実装です。コンテナはIPv4アドレスを使います。
  • host.docker.internalはTCPを扱います。ホストゲートウェイへのUDPは未実装です。
  • 公開したTCPとUDPではクライアントのアドレスを保持しません。コンテナからはLinux側が接続相手に見えます。
  • アドレス以外のDNSレコード(SRVやTXTなど)は、macOSのスプリットDNSではなく、ネットワークのDHCPリゾルバーを使います。

トラブルシューティング

Macのコンテナネットワークで起きる問題と対処法
症状考えられる原因対処
localhost:PORTへの接続が拒否されるコンテナ内のサーバーが127.0.0.1で待ち受けている0.0.0.0で待ち受ける。Portsビューにこの原因が表示される
"port is already allocated"別のプロセスやコンテナがホストポートを使用中別のホストポートを選ぶ。Portsビューで使用元を確認できる
コンテナ内で社内ホスト名が解決できない名前がVPNのDNSにしか存在しないMacでVPNに接続する。アドレス検索はMacのリゾルバーに従う
コンテナからMacの開発サーバーに接続できないコンテナ内でlocalhostを使っているhost.docker.internalを使う
最初のpullが数秒止まるネットワークフィルターが新しい接続の確認を求めているOxcartを一度許可する。それまでは代替経路で接続する
チームメンバーから開発用ポートにアクセスできるアドレスを指定せずに公開している127.0.0.1に公開する

よくある質問

MacのDockerコンテナはVPNを使いますか?

Oxcartでは使います。コンテナの外向き接続はMac自体が開くため、Macのルート、VPN、アドレス検索用のスプリットDNS、アプリ単位のファイアウォールが適用されます。OxcartはMacのルート、VPN設定、ファイアウォール設定を変更しません。

コンテナからMac上のサービスにアクセスするには?

host.docker.internalを使います。Oxcartではコンテナ内とビルドステップから、Macの127.0.0.1にバインドされたサービスにTCPで接続できます。--add-host mac:host-gatewayを使えば、同じアドレスに別の名前を付けられます。

コンテナは動いているのにポートに接続できないのはなぜですか?

多くはコンテナ内のサーバーが、公開ポートから届かない127.0.0.1で待ち受けていることが原因です。0.0.0.0で待ち受けるようにしてください。ほかにはホストポートが使用中、またはまだ何も待ち受けていない場合があります。OxcartのPortsビューで原因を確認できます。

OxcartはLittle SnitchやLuLuと併用できますか?

はい。ネットワークフィルターが確認のためにOxcartの最初の接続を保留しても、リンクが確認できるまでは代替経路を使うので、動作が止まったり回答を待ったりしません。遅い接続や失敗した接続は自動的に代替経路へ切り替わります。

Mac上のコンテナ通信は暗号化されますか?

MacとOxcartのエンジン間の公開ポートおよび外向きTCP通信はTLS 1.3で運ばれ、エンジン起動ごとに生成する証明書にピン留めされ、起動ごとの256ビットトークンを使います。Macの共有ネットワーク上にあるほかの仮想化ソフトウェアから、このリンクを守ります。インターネットへの通信はHTTPSなど、アプリ自体が使う仕組みで保護されます。

公開ポートは同じネットワークのほかのマシンから見えますか?

アドレスを指定せずに公開したポートはMacのすべてのIPv4アドレスで待ち受けるため、macOSのファイアウォールで遮断されなければ、ほかのマシンから接続できます。Mac内に限定するには127.0.0.1に公開してください。Oxcartはほかのマシンからアクセスできるポートにマークを付けます。

OxcartはコンテナのホストネットワークやIPv6に対応していますか?

いいえ。ホストネットワークモードとIPv6のコンテナネットワークは未実装です。コンテナはIPv4アドレスを使いますが、"[::]:8080:80"でIPv6上にポートを公開することはできます。

出典と測定方法

ここで説明したネットワーク動作は2026年10月10日にOxcartで確認しました。外向きTCP、DNS、公開ポート、ホストへのアクセス、Macとコンテナ間のTLSを含みます。

自分のプロジェクトで Oxcart を試す

60日間無料。その後は1ユーザー・1メジャーバージョンあたり $20。サブスクリプションではありません。

Apple silicon · macOS 26 以降

次に読む

リリースノート

Oxcart 0.1.4

最新リリース

ライセンス機能と各種改善。

  • メールの安全なリンクによるライセンスの有効化。
  • SettingsからライセンスとMacを管理。
  • ライセンスのオフライン検証。
  • パフォーマンス改善、UIの調整、不具合修正。

macOS 26.0以降が必要です

Oxcart 0.1.3

アイドル時のメモリ回収。

  • コンテナが実行されていないときに、VMのメモリを回収。
  • コンテナ、イメージ、ボリューム、ネットワークを保持。

macOS 26.0以降が必要です

Oxcart 0.1.2

コマンドラインツールの統合。

  • Oxcart付属のDockerツールと、すでにインストールされているDockerツールを切り替え。
  • UIの調整。

macOS 26.0以降が必要です

Oxcart 0.1.1

同梱のDockerツールとエージェントの制御。

  • Docker CLI 29.9、Compose 5.6、Buildx 0.38を同梱。
  • Dockerコンテキストとの連携と、キーチェーンでの認証情報の安全な保管。
  • MCPエージェントの接続と、エージェントごとの権限設定・ブロック。

macOS 26.0以降が必要です

Oxcart 0.1.0

Appleシリコン向けのDocker互換コンテナ。

  • Docker CLI、Compose、Buildxとの互換性。
  • 実行環境のコンポーネントを同梱し、オフラインでセットアップ可能。
  • プロジェクトとGitブランチごとにポートを整理。
  • デフォルトで読み取り専用のMCP連携。
  • 検証済みの自動アップデート。

macOS 26.0以降が必要です