Files
2026-07-10 15:02:09 +01:00

2.3 KiB

Docker — build & run

Prerequisites

  • Docker installed and running

Build

docker build -t skald .

For multi-platform builds (amd64 + arm64, e.g. to push to a registry):

docker buildx build --platform linux/amd64,linux/arm64 -t skald:latest .

Run

Isolated (no persistence)

Everything lives inside the container. Data and chat history are lost when the container is removed.

docker run -p 3001:3000 skald

Persistent data and database

Mount ./data (agent memory files) and ./database.db (chat history, provider config) to keep state across container restarts.

touch database.db && mkdir -p data
docker run -p 3001:3000 \
  -v ./data:/app/data \
  -v ./database.db:/app/database.db \
  skald

Persistent data only

Keep agent memory files but start with a fresh database each time.

mkdir -p data
docker run -p 3001:3000 \
  -v ./data:/app/data \
  skald

The app will be available at http://localhost:3001 (the container listens on 3000 internally).

Custom config

The default config.yml is baked into the image (port 3000, host 0.0.0.0). To override it:

-v ./config.yml:/app/config.yml

Docker socket (MCP containers)

Add -v /var/run/docker.sock:/var/run/docker.sock if you want the agent to be able to start MCP server containers via the host Docker daemon.

Volume reference

Volume Contents
./config.yml Server configuration — overrides the baked default
./data Agent memory files
./database.db Chat history and provider/model configuration
/var/run/docker.sock Allows the agent to start MCP containers via the host daemon

Self-recompilation

The container includes the full Rust toolchain. When the agent calls the restart tool, the process exits with code -1 and the supervisor (run-docker.sh) runs cargo build inside the container and restarts. Source code changes are only persisted if you also mount ./src:

docker run -p 3001:3000 \
  -v ./data:/app/data \
  -v ./database.db:/app/database.db \
  -v ./src:/app/src \
  skald

Running without Docker (local development)

cargo build
./run.sh

RUST_LOG=skald=debug,info is set by default; to override locally:

RUST_LOG=debug ./run.sh