Copy version: '3'
services:
autoheal:
deploy:
replicas: 1
environment:
AUTOHEAL_CONTAINER_LABEL: autoheal
AUTOHEAL_INTERVAL: 60
AUTOHEAL_START_PERIOD: 240
AUTOHEAL_DEFAULT_STOP_TIMEOUT: 60
AUTOHEAL_ONLY_MONITOR_RUNNING: true
WEBHOOK_URL: ${PUSHOVER_WEBHOOK:-""}
image: willfarrell/autoheal@sha256:69cf18aa4f270cf9a0490e91a068b3d39bb7123f367cbb14de4ac0670fbd00af
network_mode: none
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock
prunemate-proxy:
network_mode: host
image: ghcr.io/tecnativa/docker-socket-proxy:v0.4.2
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- ALLOW_START=1
- ALLOW_STOP=1
- ALLOW_RESTART=1
- IMAGES=1
- CONTAINERS=1
- VOLUMES=1
- NETWORKS=1
- POST=1
healthcheck:
test: wget --spider http://localhost:2375/version || exit 1
interval: "29s"
timeout: "5s"
retries: 3
start_period: "21s"
labels:
- autoheal=true
watchtower:
image: ghcr.io/containrrr/watchtower:1.7.1
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=${TZ:-Australia/Melbourne}
- WATCHTOWER_ROLLING_RESTART=true
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_INCLUDE_STOPPED=true
- WATCHTOWER_POLL_INTERVAL=86400
- WATCHTOWER_LABEL_ENABLE=true
beszel-agent:
image: ghcr.io/henrygd/beszel/beszel-agent:0.18.2@sha256:5a9a66645e7fb99da9714a3e0231f7dbadef8cbb3878bd23593402e1800bb22c
restart: unless-stopped
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- LISTEN=${BESZELPORT:-45876}
- KEY=$BESZELKEY
- GPU="true"
healthcheck:
test: ['CMD', '/agent', 'health']
start_period: 30s
interval: 120s
retries: 3
timeout: 60s
labels:
- autoheal=true
dockflare:
image: alplat/dockflare:v2.0.4
restart: unless-stopped
healthcheck:
test: wget --no-verbose --tries=1 --spider http://localhost:5000 -O /dev/null || exit 1
interval: 30s
retries: 3
start_period: 30s
timeout: 20s
ports:
- ${DOCKFLAREPORT:-5000}:5000
environment:
- TUNNEL_NAME=${HOSTNAME:-MissingHostname}
- LABEL_PREFIX=dfgeneric
- CLOUDFLARED_NETWORK_NAME=host
- CLOUDFLARED_IMAGE=cloudflare/cloudflared:2025.11.1
- TZ=${TZ:-Australia/Melbourne}
- CF_API_TOKEN=${CF_APITOKEN}
- CF_ACCOUNT_ID=${CF_ACCOUNTID}
- AGENT_STATUS_UPDATE_INTERVAL_SECONDS=5
- SYNC_ALL_CLOUDFLARE_POLICIES=true
- TZ=${TZ:-Australia/Melbourne}
- GRACE_PERIOD_SECONDS=28800
- CLEANUP_INTERVAL_SECONDS=900
- SCAN_ALL_NETWORKS=true
- MAX_CONCURRENT_DNS_OPS=${DOCKFLARE_DNSOPS:-2}
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- dockflare:/app/data
labels:
- autoheal=true
- dfgeneric.enable=true
- dfgeneric.0.hostname=${HOSTNAME:-MissingHostname}-dockflare.${URLTLD}
- dfgeneric.0.service=http://${HOSTNAME_FQDN:-localhost}:${DOCKLAREPORT:-5000}
- dfgeneric.0.access.policy=default_tld
- dfgeneric.0.zonename=${URLTLD}
#- dfgeneric.path=${URLPATH:-}
portracker:
image: mostafawahied/portracker:1.2.2@sha256:4464bc74d909f54cf29df5f4d44f8e2190e589219b9d092b48ba054077ab4582
restart: unless-stopped
network_mode: "host"
pid: "host"
volumes:
- portacker:/data
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- DATABASE_PATH=/data/portracker.db
- PORT=${PORTACKERPORT:-4999}
labels:
- autoheal=true
- dfgeneric.enable=true
- dfgeneric.0.hostname=${HOSTNAME:-MissingHostname}-portracker.${URLTLD}
- dfgeneric.0.service=http://${HOSTNAME_FQDN:-localhost}:${PORTACKERPORT:-4999}
- dfgeneric.0.access.policy=default_tld
- dfgeneric.0.zonename=${URLTLD}
#- dfgeneric.path=${URLPATH:-}
volumes:
dockflare:
portacker: