Skip to main content

Container

Official image​

There is a published multi-architecture image, so most deployments need no Dockerfile at all:

airpipeio/agent:1.42.1

linux/amd64 and linux/arm64, Alpine-based, running as a non-root user (uid 10001). Configs are mounted rather than baked in, so editing one does not mean rebuilding an image:

docker run -d \
-p 4111:4111 \
-e AIRPIPE_API_KEY="$AIRPIPE_API_KEY" \
-v "$(pwd)/configs:/app/configs:ro" \
airpipeio/agent:1.42.1

Pin the version rather than tracking latest, so a container restarting unattended cannot quietly pick up a different engine.

Running more than one replica? See Kubernetes — scheduled jobs, realtime fan-out and state all behave differently once there are peers, and the same settings apply to Docker Compose.

Build your own image​

Prefer to control the base image, add your own tooling, or bake configs in? The rest of this page builds an image from scratch.

Retrieve API Key​

Log in and retrieve an API key from https://app.airpipe.io/apikeys

Create a configs directory​

Supply any number of configuration files in this directory, and then ensure they are targeted.

Your structure could look something similar as below:

├── configs
│ ├── infoAPI.yml
│ ├── accountsAPI.yml
│ ├── backupAPI.yml
│ └── service1.yml
└── Dockerfile

Adjust Dockerfile as appropriate​

Use the below Dockerfile as a starting point.

Dockerfile
FROM alpine:latest

# Pin a specific version (docker build --build-arg AIRPIPE_VERSION=1.0.0 .)
# or leave empty to pull the latest at build time from download.airpipe.io.
ARG AIRPIPE_VERSION=""

ENV AIRPIPE_API_KEY="YOUR_API_KEY"

WORKDIR /app

RUN apk add --no-cache curl nano && \
VERSION="${AIRPIPE_VERSION:-$(curl -fsSL https://download.airpipe.io/latest.version)}" && \
ARCH=$(uname -m) && \
echo "Installing Air Pipe ${VERSION} for ${ARCH}" && \
if [ "$ARCH" = "x86_64" ]; then \
curl -o /app/agent "https://download.airpipe.io/${VERSION}/linux/x86_64/airpipe"; \
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then \
curl -o /app/agent "https://download.airpipe.io/${VERSION}/linux/aarch64/airpipe"; \
else \
echo "Unsupported architecture: ${ARCH}" && exit 1; \
fi && \
chmod +x /app/agent

# UPDATE to your config directory
COPY configs /app/configs

LABEL org.opencontainers.image.title="airpipe" \
org.opencontainers.image.version="${AIRPIPE_VERSION:-latest}" \
org.opencontainers.image.source="https://download.airpipe.io"

# 4111 is the default http port used
EXPOSE 4111

CMD ["/app/agent", "server", "--config-dir", "configs/"]

Build Image​

Name the image to something you prefer for your purpose.

By default Air Pipe runs on port 4111 you can adjust this if required.

The Dockerfile pulls the latest Air Pipe version at build time. To pin a specific version, pass a build arg (e.g. --build-arg AIRPIPE_VERSION=1.0.0).

docker build -t my-airpipe-image .

Pin a version:

docker build --build-arg AIRPIPE_VERSION=1.0.0 -t my-airpipe-image .

Running on Docker​

docker run -d -p 4111:4111 my-airpipe-image