Skip to content

Woodpecker CI Woodpecker CI

Description / nameInput element
Container Registry
Container Configuration Root Path
Timezone
User ID
Group ID
Woodpecker CI Host Port
Woodpecker CI /config Path

Build Status Last Commit

Lightweight CI/CD pipeline server with a built-in agent — integrates with Gitea, GitHub, and GitLab for automated builds and deployments.

Port 8000
Registry ghcr.io/daemonless/woodpecker
Daemonless daemonless/woodpecker
Source woodpecker-ci/woodpecker
Website woodpecker-ci.org

Version Tags

Tag Description Best For
latest Upstream Binary. Built from official release. Most users — recommended.

Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions, including the security model for host vs. container privileges.

Deployment

services:
  woodpecker:
    image: "ghcr.io/daemonless/woodpecker:latest"
    container_name: woodpecker
    environment:
      - WOODPECKER_SERVER_ENABLE=true  # Enable Woodpecker Server (true/false)
      - WOODPECKER_DATABASE_DRIVER=sqlite3  # Database driver (sqlite3 or postgres)
      - WOODPECKER_DATABASE_DATASOURCE=/config/woodpecker.sqlite  # Database connection string or file path
      - WOODPECKER_AGENT_SECRET=agent-secret  # Shared secret for server-agent communication
      - PUID=1000
      - PGID=1000
      - TZ=UTC
      - WOODPECKER_AGENT_ENABLE=  # Enable Woodpecker Agent (true/false)
      - WOODPECKER_HOST=  # The external host address
      - WOODPECKER_GITEA=  # Enable Gitea authentication (true/false)
      - WOODPECKER_GITEA_URL=  # The URL of the Gitea server
    volumes:
      - "/path/to/containers/woodpecker:/config"
    ports:
      - "8000:8000"
      - "9000:9000"
    restart: unless-stopped
# .env

DIRECTOR_PROJECT=woodpecker
WOODPECKER_SERVER_ENABLE=true
WOODPECKER_DATABASE_DRIVER=sqlite3
WOODPECKER_DATABASE_DATASOURCE=/config/woodpecker.sqlite
WOODPECKER_AGENT_SECRET=agent-secret
PUID=1000
PGID=1000
TZ=UTC
WOODPECKER_AGENT_ENABLE=
WOODPECKER_HOST=
WOODPECKER_GITEA=
WOODPECKER_GITEA_URL=
# appjail-director.yml

options:
  - virtualnet: ':<random> default'
  - nat:
services:
  woodpecker:
    name: woodpecker
    options:
      - container: 'boot args:--pull'
      - expose: '8000:8000 proto:tcp'
      - expose: '9000:9000 proto:tcp'
    oci:
      user: root
      environment:
        - WOODPECKER_SERVER_ENABLE: !ENV '${WOODPECKER_SERVER_ENABLE}'
        - WOODPECKER_DATABASE_DRIVER: !ENV '${WOODPECKER_DATABASE_DRIVER}'
        - WOODPECKER_DATABASE_DATASOURCE: !ENV '${WOODPECKER_DATABASE_DATASOURCE}'
        - WOODPECKER_AGENT_SECRET: !ENV '${WOODPECKER_AGENT_SECRET}'
        - PUID: !ENV '${PUID}'
        - PGID: !ENV '${PGID}'
        - TZ: !ENV '${TZ}'
        - WOODPECKER_AGENT_ENABLE: !ENV '${WOODPECKER_AGENT_ENABLE}'
        - WOODPECKER_HOST: !ENV '${WOODPECKER_HOST}'
        - WOODPECKER_GITEA: !ENV '${WOODPECKER_GITEA}'
        - WOODPECKER_GITEA_URL: !ENV '${WOODPECKER_GITEA_URL}'
    volumes:
      - WOODPECKER_CONFIG_PATH: /config
volumes:
  WOODPECKER_CONFIG_PATH:
    device: '/path/to/containers/woodpecker'
1
2
3
4
5
6
# Makejail

ARG tag=latest

OPTION overwrite=force
OPTION from=ghcr.io/daemonless/woodpecker:${tag}
podman run -d --name woodpecker \
  -p 8000:8000 \
  -p 9000:9000 \
  -e WOODPECKER_SERVER_ENABLE=true \
  -e WOODPECKER_DATABASE_DRIVER=sqlite3 \
  -e WOODPECKER_DATABASE_DATASOURCE=/config/woodpecker.sqlite \
  -e WOODPECKER_AGENT_SECRET=agent-secret \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=UTC \
  -e WOODPECKER_AGENT_ENABLE= \
  -e WOODPECKER_HOST= \
  -e WOODPECKER_GITEA= \
  -e WOODPECKER_GITEA_URL= \
  -v /path/to/containers/woodpecker:/config \
  ghcr.io/daemonless/woodpecker:latest
appjail oci run -Pd \
  -o overwrite=force \
  -o container="args:--pull" \
  -o virtualnet=":<random> default" \
  -o nat \
  -o expose="8000:8000 proto:tcp" \
  -o expose="9000:9000 proto:tcp" \
  -e WOODPECKER_SERVER_ENABLE=true \
  -e WOODPECKER_DATABASE_DRIVER=sqlite3 \
  -e WOODPECKER_DATABASE_DATASOURCE=/config/woodpecker.sqlite \
  -e WOODPECKER_AGENT_SECRET=agent-secret \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=UTC \
  -e WOODPECKER_AGENT_ENABLE= \
  -e WOODPECKER_HOST= \
  -e WOODPECKER_GITEA= \
  -e WOODPECKER_GITEA_URL= \
  -o fstab="/path/to/containers/woodpecker /config <pseudofs>" \
  ghcr.io/daemonless/woodpecker:latest woodpecker
- name: Deploy woodpecker
  containers.podman.podman_container:
    name: woodpecker
    image: "ghcr.io/daemonless/woodpecker:latest"
    state: started
    restart_policy: always
    env:
      WOODPECKER_SERVER_ENABLE: "true"
      WOODPECKER_DATABASE_DRIVER: "sqlite3"
      WOODPECKER_DATABASE_DATASOURCE: "/config/woodpecker.sqlite"
      WOODPECKER_AGENT_SECRET: "agent-secret"
      PUID: "1000"
      PGID: "1000"
      TZ: "UTC"
      WOODPECKER_AGENT_ENABLE: ""
      WOODPECKER_HOST: ""
      WOODPECKER_GITEA: ""
      WOODPECKER_GITEA_URL: ""
    ports:
      - "8000:8000"
      - "9000:9000"
    volumes:
      - "/path/to/containers/woodpecker:/config"

Access at: http://localhost:8000

Interactive Configuration

Parameters

Environment Variables

Variable Default Description
WOODPECKER_SERVER_ENABLE true Enable Woodpecker Server (true/false)
WOODPECKER_DATABASE_DRIVER sqlite3 Database driver (sqlite3 or postgres)
WOODPECKER_DATABASE_DATASOURCE /config/woodpecker.sqlite Database connection string or file path
WOODPECKER_AGENT_SECRET agent-secret Shared secret for server-agent communication
PUID 1000
PGID 1000
TZ UTC
WOODPECKER_AGENT_ENABLE `` Enable Woodpecker Agent (true/false)
WOODPECKER_HOST `` The external host address
WOODPECKER_GITEA `` Enable Gitea authentication (true/false)
WOODPECKER_GITEA_URL `` The URL of the Gitea server

Volumes

Path Description
/config Data directory (database, logs)

Ports

Port Protocol Description
8000 TCP Server Web UI/API
9000 TCP GRPC (Server/Agent communication)

Implementation Details

  • Architectures: amd64
  • User: bsd (UID/GID set via PUID/PGID). Defaults to 1000:1000.
  • Base: Built on ghcr.io/daemonless/base (FreeBSD 15.1).

Need help? Join our Discord community.