Files
projects/Dockers/docker-webhook-updater/README.md
T

116 lines
3.5 KiB
Markdown

# Docker Webhook Updater
A Docker container that monitors a Docker image for updates and triggers a webhook when a new version is detected.
## Features
- Monitors Docker images from any registry (Docker Hub, GHCR, Quay.io, custom registries)
- Detects image updates by comparing SHA256 digests
- Triggers webhook with bearer token authentication
- Persistent SHA storage across container restarts
- Configurable check interval
## Environment Variables
| Variable | Description | Required | Example |
| ----------------- | --------------------------------------- | -------- | ----------------------------------------------------- |
| `DOCKER_REPO_URL` | Docker registry URL | Yes | `docker.io`, `ghcr.io`, `quay.io`, or custom registry |
| `DOCKER_IMAGE` | Full image name with tag | Yes | `username/image:latest`, `library/nginx:1.25` |
| `WEBHOOK_URL` | URL to call when image is updated | Yes | `https://example.com/webhook` |
| `WEBHOOK_TOKEN` | Bearer token for webhook authentication | Yes | `your-secret-token` |
| `CHECK_INTERVAL` | Seconds between checks (default: 300) | No | `600` |
## Usage
### Docker Hub Example
```bash
docker run -d \
-e DOCKER_REPO_URL=docker.io \
-e DOCKER_IMAGE=library/nginx:latest \
-e WEBHOOK_URL=https://example.com/webhook \
-e WEBHOOK_TOKEN=your-secret-token \
-e CHECK_INTERVAL=300 \
your-registry/docker-webhook-updater:latest
```
### GitHub Container Registry Example
```bash
docker run -d \
-e DOCKER_REPO_URL=ghcr.io \
-e DOCKER_IMAGE=username/repo:latest \
-e WEBHOOK_URL=https://example.com/webhook \
-e WEBHOOK_TOKEN=your-secret-token \
your-registry/docker-webhook-updater:latest
```
### Docker Compose Example
```yaml
version: "3.8"
services:
webhook-updater:
image: your-registry/docker-webhook-updater:latest
environment:
- DOCKER_REPO_URL=docker.io
- DOCKER_IMAGE=library/nginx:latest
- WEBHOOK_URL=https://example.com/webhook
- WEBHOOK_TOKEN=your-secret-token
- CHECK_INTERVAL=300
restart: unless-stopped
```
## How It Works
1. The service periodically checks the Docker registry for the specified image
2. It retrieves the SHA256 digest of the image manifest
3. Compares the current SHA with the previously stored SHA
4. If different, triggers the webhook with a POST request containing:
```json
{
"event": "image_updated",
"image": "username/image:latest",
"repo_url": "docker.io"
}
```
5. Updates the stored SHA only after successful webhook trigger
## Webhook Request Format
When an image update is detected, the service sends a POST request to the webhook URL:
- **Method**: POST
- **Headers**:
- `Authorization: Bearer {WEBHOOK_TOKEN}`
- `Content-Type: application/json`
- **Body**:
```json
{
"event": "image_updated",
"image": "username/image:tag",
"repo_url": "docker.io"
}
```
## Notes
- The SHA is stored in `/app/sha.txt` inside the container
- On first run, the SHA is stored without triggering the webhook
- If the webhook fails, the SHA is not updated, so it will retry on the next check
- For private Docker images, authentication may be required (not currently supported)
- The service runs continuously and checks at the specified interval
## Building
```bash
docker build -t docker-webhook-updater:latest .
```