Loading...
Loading...
Guide for using Apple Container CLI to run Linux containers on Apple silicon Macs (macOS 26+). Use when managing OCI containers, building images, configuring networks/volumes, or working with container system services on macOS.
npx skill4agent add vinnie357/claude-skills container.pkg# Start the system service
container system start
# Stop the system service
container system stop
# Check service status
container system status
# Show CLI version
container system version
# View system logs
container system logs
# Show disk usage
container system df# List all properties
container system property list
# Get a specific property
container system property get <key>
# Set a property
container system property set <key> <value>
# Clear a property
container system property clear <key># Create a DNS entry
container system dns create <name> <ip>
# Delete a DNS entry
container system dns delete <name>
# List DNS entries
container system dns list# Set custom kernel
container system kernel set <path>
# Force set (0.5.0+)
container system kernel set --force <path># Run interactively
container run -it ubuntu:latest /bin/bash
# Run detached
container run -d --name myapp nginx:latest
# Run with port mapping
container run -d -p 8080:80 nginx:latest
# Run with volume mount
container run -v /host/path:/container/path ubuntu:latest
# Run with environment variables
container run -e FOO=bar -e BAZ=qux myimage:latest
# Run with auto-remove
container run --rm -it alpine:latest /bin/sh
# Combined common flags
container run -d --name web -p 8080:80 -v ./html:/usr/share/nginx/html -e ENV=prod nginx:latest
# Run with resource limits (0.9.0+)
container run -d --name app --cpus 2 --memory 4g myapp:latest
# Run with read-only rootfs (0.8.0+)
container run --read-only -v tmpdata:/tmp myapp:latest
# Run with Rosetta x86_64 emulation (0.7.0+)
container run --rosetta -it amd64-image:latest /bin/bash
# Run with DNS configuration
container run --dns 8.8.8.8 --dns-search example.com myapp:latest
# Run with custom MAC address (0.7.0+)
container run --mac-address 02:42:ac:11:00:02 --network mynet myapp:latest
# Access host from container (0.9.0+)
# Use host.docker.internal to reach host services
container run -e API_URL=http://host.docker.internal:3000 myapp:latest# List running containers
container list
container ls
# List all containers (including stopped)
container list --all
# Start a stopped container
container start <name-or-id>
# Stop a running container
container stop <name-or-id>
# Kill a container (force stop)
container kill <name-or-id>
# Remove a container
container delete <name-or-id>
container rm <name-or-id>
# Execute command in running container
container exec -it <name-or-id> /bin/bash
# Execute command detached (0.7.0+)
container exec -d <name-or-id> /usr/bin/background-task
# View container logs
container logs <name-or-id>
container logs --follow <name-or-id>
# Inspect container details
container inspect <name-or-id>
# Container resource stats
container stats
# Remove all stopped containers
container prune# Create container without starting
container create --name myapp nginx:latest
# Start it later
container start myapp# Pull an image
container image pull ubuntu:latest
# Pull with platform specification
container image pull --platform linux/arm64 nginx:latest
container image pull --arch arm64 --os linux nginx:latest
# List images
container image list
container image ls
# Tag an image
container image tag ubuntu:latest myregistry/ubuntu:v1
# Push to registry
container image push myregistry/ubuntu:v1
# Save image to archive
container image save ubuntu:latest -o ubuntu.tar
# Load image from archive
container image load -i ubuntu.tar
# Delete an image
container image delete ubuntu:latest
# Force delete an image (0.9.0+, verify flag with --help)
container image delete --force ubuntu:latest
# Inspect image metadata (enhanced output in 0.9.0+)
container image inspect ubuntu:latest
# Remove unused images
container image prune
# Remove all unused images, not just dangling (0.7.0+)
container image prune -a--platform linux/arm64 # Full platform string
--arch arm64 # Architecture only
--os linux # OS only
--scheme oci # Image schemeamd64x86_64arm64aarch64# Build from current directory
container build -t myimage:latest .
# Build with specific Dockerfile
container build -t myimage:latest -f Dockerfile.prod .
# Build with build arguments
container build -t myimage:latest --build-arg VERSION=1.0 .
# Build without cache
container build -t myimage:latest --no-cache .
# Multi-stage build with target
container build -t myimage:latest --target builder .
# Build with platform
container build -t myimage:latest --platform linux/arm64 .
# Build with output
container build -t myimage:latest -o type=local,dest=./output .
# Build with multiple tags (0.6.0+)
container build -t myimage:latest -t myimage:v1.0 .
# Build with no network access (0.6.0+)
container build -t myimage:latest --network none .
# Build with DNS configuration (0.9.0+)
container build -t myimage:latest --dns 8.8.8.8 .
# Build from stdin (0.7.0+)
container build -t myimage:latest -f - . <<EOF
FROM alpine:latest
RUN echo "hello"
EOFDockerfileContainerfile# Start the builder
container builder start
# Stop the builder
container builder stop
# Delete the builder
container builder delete
# Check builder status
container builder status# Create a network
container network create mynetwork
# Create with subnet
container network create --subnet 10.0.0.0/24 mynetwork
# Create with labels
container network create --labels env=dev mynetwork
# List networks
container network list
# Inspect a network
container network inspect mynetwork
# Delete a network
container network delete mynetwork
# Remove unused networks
container network prunecontainer network create --help# Create a shared network
container network create app-net
# Run containers on the network
container run -d --name db --network app-net postgres:latest
container run -d --name web --network app-net -p 8080:80 myapp:latest
# Containers can reach each other by name
container exec web curl http://db:5432# Create a volume
container volume create mydata
# Create with size limit
container volume create -s 10G mydata
# Create with labels
container volume create --label env=prod mydata
# Create with driver options
container volume create --opt type=tmpfs mydata
# List volumes
container volume list
# Inspect a volume
container volume inspect mydata
# Delete a volume
container volume delete mydata
# Remove unused volumes
container volume prune# Mount a named volume
container run -v mydata:/data myimage:latest
# Mount a host directory (bind mount)
container run -v /host/path:/container/path myimage:latest
# Read-only mount
container run -v mydata:/data:ro myimage:latest# Log in to a registry
container registry login <registry-url>
# Log out from a registry
container registry logout <registry-url>com.apple.containercom.apple.container.registry| Version | Change | Migration |
|---|---|---|
| 0.6.0 | Image store directory moved from | Update paths referencing |
| 0.7.0 | | Use |
| 0.8.0 | Client API reorganization | Update API consumers |
| 0.8.0 | Subnet allocation defaults changed | Review network configurations |
--tag--network nonenetwork create --subnetvolume prune--format--quiet--rosettacontainer stats--mac-addresssystem dfimage prune -aexec -d--read-onlynetwork prune--cpus--memoryhost.docker.internal--dns--force--disable-progress-updates--progress none.buildbuilder| Version | Containerization | Other |
|---|---|---|
| 0.5.0 | 0.9.1 | Builder shim 0.6.1 |
| 0.6.0 | 0.12.1 | |
| 0.7.0 | 0.16.0 | Builder shim 0.7.0 |
| 0.8.0 | 0.21.1 | |
| 0.9.0 | 0.24.0 | Kata 3.26.0 |
templates/<version>/commands.md# Start system service
nu scripts/container-system.nu start
# Check status
nu scripts/container-system.nu status
# Full health check (status + disk + container count)
nu scripts/container-system.nu health
# View disk usage
nu scripts/container-system.nu df
# Show version
nu scripts/container-system.nu version# List images
nu scripts/container-images.nu list
# Pull an image
nu scripts/container-images.nu pull ubuntu:latest
# Build from Dockerfile
nu scripts/container-images.nu build -t myimage:latest .
# Prune unused images
nu scripts/container-images.nu prune# List running containers
nu scripts/container-lifecycle.nu ps
# Run a container
nu scripts/container-lifecycle.nu run ubuntu:latest
# View logs
nu scripts/container-lifecycle.nu logs mycontainer
# Execute command
nu scripts/container-lifecycle.nu exec mycontainer /bin/bash# Prune everything unused
nu scripts/container-cleanup.nu prune-all
# Prune only containers
nu scripts/container-cleanup.nu prune-containers
# Show disk usage
nu scripts/container-cleanup.nu dftemplates/mise.tomlmise container:start # Start system service
mise container:stop # Stop system service
mise container:status # Show formatted status
mise container:run # Run container (accepts image arg)
mise container:ps # List running containers
mise container:images # List images
mise container:build # Build from Dockerfile/Containerfile
mise container:prune # Clean up unused resources
mise container:health # System status + disk + container count
mise container:df # Disk usage
mise container:version # CLI version# Start the system
container system start
# Pull and run an image
container run -it --rm ubuntu:latest /bin/bash
# Check what's running
container ls# Build your image
container build -t myapp:latest .
# Run it
container run -d --name myapp -p 8080:80 myapp:latest
# Check logs
container logs --follow myapp# Create network
container network create mynet
# Start database
container run -d --name postgres --network mynet \
-e POSTGRES_PASSWORD=secret \
-v pgdata:/var/lib/postgresql/data \
postgres:16
# Start application
container run -d --name app --network mynet \
-p 3000:3000 \
-e DATABASE_URL=postgres://postgres:secret@postgres:5432/mydb \
myapp:latest# Create a volume
container volume create appdata
# Run with volume
container run -d --name db -v appdata:/var/lib/data mydb:latest
# Volume persists after container removal
container rm db
container run -d --name db2 -v appdata:/var/lib/data mydb:latest# Check status
container system status
# Start if not running
container system start
# View logs for errors
container system logs# Check system is running
container system status
# Try with explicit platform
container image pull --platform linux/arm64 <image>
# Check registry authentication
container registry login <registry># Check volume exists
container volume list
# Inspect volume for mount details
container volume inspect <name>
# Run container with specific user
container run -u 1000:1000 -v myvol:/data myimage:latest# Check builder status
container builder status
# Restart builder
container builder stop
container builder start
# Delete and recreate if stuck
container builder delete
container builder start