How to run the IronFlow server in Docker¶
Quick path for a single-container API server with embedded scheduler and local worker (Tier A). For production-shaped Postgres + services + HTTP workers, use Docker Compose. Overview: Self-hosted server.
Prefect example to borrow from: Run the Prefect server in Docker — same “one container, publish the API port” shape; IronFlow serves the API on 8000 (Prefect’s UI/API default is 4200).
Pull a release image (when published)¶
docker pull ghcr.io/pppsdavid/ironflow-server:0.2.0
docker run -p 8000:8000 \
-v ironflow-data:/data \
-e IRONFLOW_HISTORY_PATH=/data/ironflow_history.jsonl \
ghcr.io/pppsdavid/ironflow-server:0.2.0
Open http://127.0.0.1:8000/health — expect {"status":"ok"}.
Build from this repository¶
# Build a wheel from the current checkout (needs Rust toolchain for the native engine)
mkdir -p dist/wheels
python -m pip install build
python -m build --wheel --outdir dist/wheels --directory python-shim
docker build -f deploy/docker/Dockerfile.server \
--build-arg INSTALL_MODE=local \
-t ironflow-server:local .
Or use a PyPI wheel inside the image (no local cargo):
mkdir -p dist/wheels
docker build -f deploy/docker/Dockerfile.server \
--build-arg INSTALL_MODE=pypi \
--build-arg IRONFLOW_VERSION=0.2.0 \
-t ironflow-server:0.2.0 .
Run¶
docker run -p 8000:8000 \
-v ironflow-data:/data \
-e IRONFLOW_HISTORY_PATH=/data/ironflow_history.jsonl \
ironflow-server:local
Important container settings (same idea as Prefect’s --host 0.0.0.0):
- The image binds
0.0.0.0:8000inside the container. - Map a host port with
-p 8000:8000. - Persist state with a volume on
/data(IRONFLOW_HISTORY_PATH).
Point clients at the host-mapped URL:
export IRONFLOW_API_URL=http://127.0.0.1:8000
ironflow deploy --file ironflow.yaml --all
Optional: basic auth¶
See Secure a self-hosted server. Example:
docker run -p 8000:8000 \
-v ironflow-data:/data \
-e IRONFLOW_SERVER_API_AUTH_STRING='admin:pass' \
ironflow-server:local
Clients and CLI:
export IRONFLOW_API_AUTH_STRING='admin:pass'
curl -u admin:pass http://127.0.0.1:8000/api/deployments
Validate end-to-end¶
bash scripts/docker_server_smoke.sh
PyPI package vs Docker image¶
| Install path | Best for |
|---|---|
pip install ironflow-prefect-compat |
Flow code, libraries, custom processes |
docker pull ghcr.io/.../ironflow-server |
Running the control-plane API without managing Python/uvicorn |
Both ship the same wheel version; the image is an opinionated server runtime. Maintainer notes (PyPI vs GHCR tags) live in deploy/docker/README.md in the repository.