Files
minecraft/docs/apple-container.md
T
2026-10-05 18:34:53 -05:00

4.9 KiB

Apple container for local tests; x86_64 Docker for production

The production target is an x86_64 Linux host running the normal Docker Compose stack. The Dockerfile uses BuildKit's target architecture when installing the Docker CLI and Compose plugin, so ARM64 local builds and x86_64 production builds each get the correct binaries. No architecture is forced in the production Compose file.

The Mac development paths use Apple's official container CLI. Docker Desktop is not required. The local data folders are isolated from production data and ignored by Git.

Native world-server testing on macOS

Prerequisites: Apple silicon, supported macOS, Apple's container installed and its system service running, Node 26, npm, Python 3.12+ (restore helper), and npm ci in dashboard/.

./scripts/apple-container-dev.sh

The control process runs on the Mac at http://localhost:8081/network. Credentials are generated once in data/apple-native/panel.env (username admin). That process must run on macOS to invoke Apple's CLI. Minecraft, backups and Velocity run inside Apple Linux containers. This is intentionally separate from the containerized UI preview.

With CONTAINER_RUNTIME=apple, Worlds & Network uses:

  • container image pull and container run for runtime deployment;
  • container inspect, stats, logs, exec, stop and start for management;
  • a dedicated craftdeck virtual network, unless APPLE_CONTAINER_NETWORK overrides it;
  • Minecraft protocol health checks before reporting servers ready;
  • actual container IPs for backup RCON and Velocity backend routes;
  • explicit DNS (1.1.1.1 by default; set APPLE_CONTAINER_DNS for your resolver);
  • the same profile validation, forwarding authentication, backups and restore workflows.

Start all routed servers before initially applying the gateway. Native VM IPs can change on every stop/start. Panel restart, deploy, snapshot and restore operations refresh backup RCON and running gateway routes automatically. Updating those routes restarts Velocity and disconnects its players, even if only one world changed. Stopped worlds are removed from native routes; an available world temporarily serves as the lobby if the chosen lobby is offline. If no routed world is ready, the gateway stops; start a world and apply routing to bring it back. After changing containers outside the panel, use Restart for each affected profile and apply routing again. Apple CLI does not implement Docker restart policies or Compose health scheduling: the adapter waits for startup, but does not provide a continuous crash/reboot supervisor. Use the production Docker stack for unattended hosting. A native snapshot uses macOS tar/Python and can be slower on shared mounts. Apple maps host files into each VM; filesystem ownership behavior can differ from the Linux production host.

The original primary-server pages still expect their configured MC_CONTAINER and RCON endpoint. The local script creates no primary server; those pages remain offline until one is explicitly configured. The new network page is the local test surface. Primary .env/Compose configuration apply remains a Docker-only workflow.

Stop individual test servers through the network page (this also stops their backup writer), or use container stop --time 90 <name>. Stop the gateway with container stop craftdeck-velocity. Ctrl-C stops the native control process; it does not stop already-running Minecraft containers. All test worlds persist under data/apple-native/network/.

Containerized panel preview

For image/UI/API smoke testing without server orchestration:

./scripts/apple-container-preview.sh build
./scripts/apple-container-preview.sh start

Open http://localhost:8080/network. The login is admin; the generated password is in data/apple-preview/preview.env. Stop it with:

./scripts/apple-container-preview.sh stop

A Linux panel container cannot call the macOS Apple CLI and Apple container does not supply a Docker Engine socket. Use the native host process above when testing actual server controls. The image preview faithfully reports missing Docker infrastructure.

x86_64 production image

Build the production architecture explicitly on the Mac:

container build --platform linux/amd64 --cpus 4 --memory 4G \
  -t craftdeck:x86-local dashboard

Apple's Rosetta support can run that image for an additional local smoke test:

mkdir -p data/apple-x86
container run -d --name craftdeck-x86-preview --arch amd64 --rosetta \
  --cpus 2 --memory 1G -p 127.0.0.1:8082:8080 \
  --env-file data/apple-preview/preview.env \
  -v "$PWD/data/apple-x86:/preview" craftdeck:x86-local

This verifies an x86_64 Linux process on the Mac; it is not a performance benchmark of the real x86_64 server. On the Linux host, use the repository's normal setup and docker compose up -d --build. Network orchestration defaults to Docker there.

Reference: Apple container documentation.