How to Troubleshoot Container Networking Issues on macOS 15: Complete Diagnostics Guide

On macOS 15, container networking fails when the vmnet framework and the container-network-vmnet helper binary disagree on the subnet CIDR, resulting in empty network attachments that can be resolved by restarting the container system or reconfiguring the default network subnet.

The apple/container repository provides a lightweight container runtime that executes workloads inside a Linux VM using virtualized networking through Apple's vmnet framework. On macOS 15, this architecture carries a critical limitation: the framework supports only a single default network, and CIDR mismatches between the helper service and the VM configuration cause complete network isolation. Understanding how the container-network-vmnet helper allocates interfaces is essential for diagnosing why containers appear to have "no network access" despite working host connectivity.

Understanding the macOS 15 Network Architecture

On macOS 15, container runs each workload inside a lightweight Linux VM whose virtual NIC is managed by the vmnet framework. The XPC helper binary container-network-vmnet handles interface allocation, but the operating system version restricts this to a single default network subnet.

This limitation is documented in the technical overview and implemented in the Swift source code. The helper logic resides in Sources/Plugins/NetworkVmnet/NetworkVmnetHelper.swift, which communicates with vmnet.framework to request network attachments. The runtime identifies which network strategy to use through the plugin identifier stored in Sources/ContainerResource/Network/NetworkConfiguration.swift. When the helper cannot allocate an interface—typically due to a CIDR mismatch—the container receives an empty networks list and loses all connectivity.

Diagnosing Network Failures

Before applying fixes, verify that the symptoms match the macOS 15 specific failure mode. Containers with network issues will show an empty networks array in their inspection data, and the helper logs will lack allocation confirmation messages.

Verify macOS Version and Helper Status

First, confirm you are running the affected operating system version and that the vmnet helper is active:


# Check macOS version - the limitation applies specifically to macOS 15

sw_vers -productVersion

# Verify the helper is running and allocating addresses

container system logs | grep container-network-vmnet

Expected output should show entries like "allocated attachment … address=192.168.64.2/24". Missing entries indicate the helper failed to start, while macOS 26+ supports multiple isolated networks and requires different troubleshooting paths.

Inspect Network Configuration

List existing networks to see the current state and subnet:

container network list

On macOS 15, you should see only the default network with a CIDR like 192.168.64.0/24 and state running. If the network exists but containers lack connectivity, inspect a specific container:

container inspect <container-name> | jq '.networks'

An empty array [] confirms the container never received an IP address from the helper, indicating a vmnet allocation failure rather than a routing issue.

Step-by-Step Troubleshooting Solutions

Resolve container networking issues on macOS 15 by progressing from least to most invasive interventions.

Restart the Container System

Force the vmnet helper to re-initialize, clearing transient failures:

container system stop
container system start

This refreshes the connection between the container-apiserver and the XPC helper without destroying network configurations.

Recreate the Default Network

If restarting fails, remove potentially corrupted network state. The default network implementation in Sources/ContainerCommands/Network/NetworkCreate.swift handles recreation automatically:


# Remove the existing network (may require system stop if in use)

container network rm default

# Restart creates a fresh default network automatically

container system start

Resolve CIDR Conflicts

The most common root cause on macOS 15 is a subnet clash. The helper defaults to 192.168.64.1/24, but if your environment already uses this range, vmnet cannot allocate interfaces. Override the subnet in the configuration file:

cat <<EOF > ~/.config/container/config.toml
[network]
subnet = "192.168.65.1/24"
EOF

container system restart

This change forces the container-network-vmnet helper to request a different CIDR from the vmnet framework.

Verify Container Attachment

Test connectivity with a container explicitly attached to the default network:

container run --rm --network default alpine ping -c 3 8.8.8.8

Successful pings confirm the network path is restored through the vmnet interface.

Advanced vmnet Diagnostics

For persistent failures, examine low-level vmnet framework errors that explain why the helper cannot create a NIC:

log show --predicate 'process == "container-network-vmnet"' --last 1h

The architecture follows this data flow:


container CLI ──► container-apiserver ──► XPC helper "container-network-vmnet"
                (via XPC)                 (uses vmnet.framework)
                │                         │
                └─► VM (lightweight) ◄─────┘

When NetworkVmnetHelper.swift cannot allocate an interface, the NetworkCreate command fails silently in the background, leaving the container's networks field empty.

Summary

  • macOS 15 limitation: Only one default network is supported via vmnet framework, unlike macOS 26+.
  • Root cause: CIDR mismatches between the container-network-vmnet helper (default 192.168.64.1/24) and the vmnet-provisioned subnet cause empty network attachments.
  • Quick fix: Restart the container system with container system stop && container system start.
  • Nuclear option: Delete and recreate the default network, or change the subnet in ~/.config/container/config.toml.
  • Verification: Empty networks arrays in container inspect output confirm the helper allocation failure.

Frequently Asked Questions

Why do containers on macOS 15 have no network access while the host works fine?

Containers lose connectivity when the container-network-vmnet helper cannot allocate a virtual NIC from the vmnet framework, typically due to the single-network limitation on macOS 15 or a CIDR conflict with the default 192.168.64.0/24 subnet. The container continues to run but receives an empty networks configuration, isolating it from all network traffic according to the implementation in Sources/ContainerResource/Network/NetworkConfiguration.swift.

How do I check if the container-network-vmnet helper is running correctly?

Run container system logs | grep container-network-vmnet to search for allocation confirmation messages. Healthy logs show entries like "allocated attachment … address=192.168.64.2/24". If these entries are missing, the XPC helper defined in Sources/Plugins/NetworkVmnet/NetworkVmnetHelper.swift failed to start or crashed, preventing IP address assignment.

Can I create multiple isolated networks on macOS 15?

No. According to the apple/container technical overview and source code in NetworkConfiguration.swift, macOS 15's vmnet framework only supports a single default network. Multiple isolated networks require macOS 26 or later, where the framework supports additional network instances.

What is the default subnet, and how do I change it if it conflicts with my VPN?

The default subnet is 192.168.64.0/24 (gateway 192.168.64.1). To resolve conflicts, create or edit ~/.config/container/config.toml and set a different subnet like 192.168.65.1/24 under the [network] section, then run container system restart to apply the change.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →