Skip to main content
Ask your AI

Docker

The walkeros/flow image runs a flow bundle you build with the CLI. It runs prebuilt artifacts only, so every Docker path starts with walkeros bundle. This quickstart builds a small collector, runs it in a container, and sends it an event.

You need Docker, Node.js, and network access to npm (the CLI downloads the packages your flow names).

1. Create a flow​

Save this as flow.json. The Express source receives events on /collect, and the demo destination logs each event's name and data:

{
  "version": 4,
  "flows": {
    "default": {
      "config": { "platform": "server" },
      "sources": {
        "http": { "package": "@walkeros/server-source-express" }
      },
      "destinations": {
        "demo": {
          "package": "@walkeros/destination-demo",
          "config": { "settings": { "values": ["name", "data"] } }
        }
      }
    }
  }
}

2. Bundle it​

npm install -g @walkeros/cli
walkeros bundle flow.json -o dist/

This writes dist/flow.mjs, dist/package.json, and dist/node_modules/. The packages stay in node_modules/, so the container needs the whole directory, not flow.mjs alone.

3. Run the container​

Mount the bundle directory at /app/flow, where the image expects flow.mjs:

docker run --rm -p 8080:8080 \
  -v "$PWD/dist:/app/flow:ro" \
  walkeros/flow:<version>

Replace <version> with a walkeros/flow version that ships runneros, ideally the CLI version you bundled with, see image tags. If the runtime exits with Flow artifact not found, check the mount path.

4. Send an event​

In another terminal:

curl -X POST http://localhost:8080/collect \
  -H "Content-Type: application/json" \
  -d '{"name":"page view","data":{"title":"Home"}}'

The response is {"success":true,"timestamp":...}, and the container log shows the event:

[demo] {
  "name": "page view",
  "data": {
    "title": "Home"
  }
}

GET http://localhost:8080/health returns {"status":"ok"} while the container runs, and GET http://localhost:8080/ready returns {"status":"ready"} once the flow is up.

Build a custom image​

Bake the bundle into your own image instead of mounting it:

FROM walkeros/flow:<version>
COPY dist/ /app/flow/
docker build -t my-walker .
docker run -p 8080:8080 my-walker

To build the artifact inside Docker as well, use the canonical Dockerfile.

Docker compose​

services:
  walkeros:
    image: walkeros/flow:<version>
    volumes:
      - ./dist:/app/flow:ro
    ports:
      - '8080:8080'
    restart: unless-stopped

Single-file archive​

To ship one file instead of a directory, bundle to an archive and point BUNDLE at it. The runtime extracts it into /app/flow/ at startup, so leave that directory writable:

walkeros bundle flow.json -o flow.tar.gz

docker run --rm -p 8080:8080 \
  -v "$PWD/flow.tar.gz:/app/bundle/flow.tar.gz:ro" \
  -e BUNDLE=/app/bundle/flow.tar.gz \
  walkeros/flow:<version>

Environment variables​

VariableDescriptionDefault
BUNDLEArtifact path or URL (.mjs, .js, .cjs, .tar.gz, .tgz)/app/flow/flow.mjs
PORTServer port8080

Next steps​

💡 Setting this up for production?
If your setup involves consent management, server-side pipelines, or custom destinations, the creators of walkerOS offer hands-on implementation support. Start with a free scoping call.