# How to Start and Check the Status of Apple Container Services

> Learn to start Apple Container services using container system start and check their status with container system status. Ensure your container apiserver is running.

- Repository: [Apple/container](https://github.com/apple/container)
- Tags: how-to-guide
- Published: 2026-06-23

---

**Use `container system start` to initialize the daemon architecture and `container system status` to verify that launch agents like `container-apiserver` are running and healthy.**

Apple Container is a lightweight virtualization framework for macOS that exposes a command-line interface to manage containerized workloads. Understanding how to start and check the status of Apple Container services is critical for ensuring the `vmnet` networking stack and runtime components are properly registered with `launchd` before deploying workloads.

## Understanding the Service Architecture

The `container` binary acts as a thin wrapper that communicates with the `container-apiserver` launch daemon. When you invoke `container system start`, the daemon spawns subsidiary services—including `container-runtime-linux`—and initializes the default `vmnet` network bridge. The installation helpers in [`scripts/install-init.sh`](https://github.com/apple/container/blob/main/scripts/install-init.sh) (line 75) automate this registration process during initial setup, though you can also trigger it manually.

## Starting Apple Container Services

To manually start the services after installation, execute `container system start`. This command registers launch agents under the `com.apple.container.*` namespace, creates the default network interface, and prepares the logging infrastructure.

```bash
container system start \
    --app-root /Applications \
    --install-root /Library/Containers \
    --log-root /var/log/container \
    --enable-kernel-install \
    --debug

```

The flags define the application bundle location, container storage root, and log directory. The `--enable-kernel-install` parameter ensures any required kernel extensions are loaded before the daemon attempts to initialize the virtualization stack.

## Checking Apple Container Service Status

Verify the system health using `container system status`. This queries the health endpoints registered with `launchd` via IPC and returns a concise summary of each component's state, process ID, and operational status.

```bash
container system status \
    --prefix "container-" \
    --format "{{.Name}} {{.PID}} {{.State}}"

```

### Interpreting the Output

The status command reports on critical daemons including `container-apiserver` and `container-runtime-linux`. A healthy system displays these agents as "running" with valid PIDs. If any service reports as "stopped" or the command returns empty results, the launch agents may not be loaded—check the logs in the directory specified by `--log-root` during startup.

## Stopping and Restarting Services

To gracefully shut down all components and clean up the `vmnet` interfaces, run:

```bash
container system stop

```

This terminates the launch agents managed by `com.apple.container.*`. For a full restart, execute `container system stop` followed by `container system start` to reinitialize the stack.

## Summary

- **`container system start`** initializes the `container-apiserver` daemon and subsidiary services like `container-runtime-linux`, creating the default `vmnet` network.
- **Installation automation** in [`scripts/install-init.sh`](https://github.com/apple/container/blob/main/scripts/install-init.sh) (line 75) calls this command during setup, as documented in the official command reference.
- **`container system status`** queries `launchd` via IPC to report PID and health for each registered agent.
- **Clean shutdown** requires `container system stop` to properly terminate daemons and release network resources.

## Frequently Asked Questions

### What does `container system start` do under the hood?

According to the apple/container source code, this command registers launch agents under the `com.apple.container.*` namespace, creates the default `vmnet` network, and spawns the `container-apiserver` daemon. The daemon then manages subsidiary processes including the Linux runtime environment.

### How can I verify the services are actually running?

Run `container system status` to query the health endpoints registered with `launchd`. This displays the PID and state for each component, including `container-apiserver` and `container-runtime-linux`. If the command returns no output or errors, the launch agents may not be loaded.

### Where are the logs for troubleshooting startup failures?

Logs are written to the directory specified by the `--log-root` flag during `container system start`. By default, this is often `/var/log/container`, but the path can be customized to any writable location specified during the start command.

### Can I start the services without the install script?

Yes. While [`scripts/install-init.sh`](https://github.com/apple/container/blob/main/scripts/install-init.sh) automates the process on line 75, you can manually invoke `container system start` with the appropriate `--app-root`, `--install-root`, and `--log-root` flags as documented in [`docs/command-reference.md`](https://github.com/apple/container/blob/main/docs/command-reference.md).