Step 2: Run ControlBird CE

Start the ControlBird CE container with a single command.

Start ControlBird

Run the following command to start ControlBird CE. This pulls the image (if not already cached) and starts the container:

docker run -d \ --name controlbird \ -p 3000:3000 \ -v controlbird-data:/opt/controlbird/data \ controlbird/ce:latest

What This Does

-dRuns in the background (detached mode)
--name controlbirdNames the container for easy management
-p 3000:3000Web UI: access ControlBird in your browser
-v controlbird-data:...Persists your data across container restarts

Why the kernel port is not published

Earlier versions of this guide also published the kernel port with -p 9100:9100. You do not need it. Services inside the container reach the kernel over localhost, and the Shell app runs the cb-* tools in there as well, so a single node works without it.

Add it only if you are running several nodes that peer with each other, or you want to run the CLI tools from your host. Even then, only do it on a network you trust. Anything that can reach that port can read and write the whole store, so it should never face the public internet.

Additional Ports

If you plan to use protocol integrations, you can expose additional ports:

  • -p 1883:1883: MQTT broker
  • -p 4840:4840: OPC UA server
  • -p 502:502: Modbus TCP server

In-Memory Store

By default CE stores entity and field data in SQLite, with a bounded memory footprint. Add -e STORE_BACKEND=memory to the docker run command to keep the whole dataset resident in RAM instead, for sub-millisecond reads. Durability is the same either way, since both backends persist through the same write-ahead log and snapshots, so the trade-off is RAM usage that grows with your data, not data safety. On a small host like a Raspberry Pi, the default SQLite backend is usually the better fit.

Verify It's Running

Check that the container is up:

docker ps

You should see controlbird listed with status Up. The web UI takes a few seconds to initialize on first start.

Managing the Container

Stop

docker stop controlbird

Start Again

docker start controlbird

View Logs

docker logs -f controlbird

Remove

docker rm -f controlbird

Your data is safe in the controlbird-data volume.