jason ea5ca1a4ed 🐛 Fix container DNS: ship resolv.conf without search domain 🐛
Hosts with a search domain cause containers to inherit it. When the
zone has a wildcard AAAA record, public hostnames resolve to the host's
own IPv6 address instead of the real server, breaking all outbound
HTTPS and DNS from inside the container.
The entrypoint already has a hook: if /usr/local/etc/resolv.conf
exists it replaces /etc/resolv.conf at container startup. Ship a
clean resolv.conf with Cloudflare + Google DNS and no search domain
so container DNS is always correct regardless of host configuration.
- rootfs/usr/local/etc/resolv.conf: new file — clean DNS, no search domain

rootfs/usr/local/etc/resolv.conf
2026-06-05 12:32:32 -04:00
2026-05-12 20:05:26 -04:00
🦈🏠🐜 Initial Commit 🐜🦈🏠
2023-08-28 20:44:28 -04:00
2026-05-18 15:38:17 -04:00
2026-05-12 20:05:26 -04:00
2026-05-12 20:05:26 -04:00
2026-05-18 15:38:17 -04:00
2026-05-12 20:05:26 -04:00
2026-05-18 15:38:17 -04:00
2026-05-18 15:38:17 -04:00
2025-09-05 13:34:58 -04:00
2026-05-12 20:05:26 -04:00
2026-05-12 20:05:26 -04:00
2026-05-12 20:05:26 -04:00
2026-05-18 15:38:17 -04:00

Welcome to apprise

REST API gateway for the apprise notification library. POST a notification to http://<host>:8000/notify (or /notify/<key> for stateful configs) and apprise fans it out to dozens of notification services (Discord, Slack, Telegram, Pushover, email, MQTT, ...).

This image bundles nginx + gunicorn + Django + apprise-api on top of Alpine.

Ports

Port Purpose
8000 Apprise REST API + web UI

Volumes

Path Purpose
/config Apprise YAML/text configs (/config/apprise/store/<key>.yml), nginx overrides (/config/nginx/), per-service env (/config/env/apprise.sh)
/data Logs (/data/logs/apprise/), runtime state

Install my system scripts

 sudo bash -c "$(curl -q -LSsf "https://github.com/systemmgr/installer/raw/main/install.sh")"
 sudo systemmgr --config && sudo systemmgr install scripts

Automatic install/update

dockermgr update apprise

Install and run container

dockerHome="/var/lib/srv/$USER/docker/casjaysdevdocker/apprise/apprise/latest/rootfs"
mkdir -p "$dockerHome/data" "$dockerHome/config"
docker run -d \
  --restart always \
  --name casjaysdevdocker-apprise-latest \
  --hostname apprise \
  -e TZ=${TIMEZONE:-America/New_York} \
  -v "$dockerHome/data:/data:z" \
  -v "$dockerHome/config:/config:z" \
  -p 8000:8000 \
  casjaysdevdocker/apprise:latest

via docker-compose

version: "2"
services:
  apprise:
    image: casjaysdevdocker/apprise
    container_name: casjaysdevdocker-apprise
    environment:
      - TZ=America/New_York
      - HOSTNAME=apprise
    volumes:
      - "./data:/data:z"
      - "./config:/config:z"
    ports:
      - 8000:8000
    restart: always

First-run usage

  1. Visit http://localhost:8000/ to see the apprise-api welcome UI.
  2. Save a stateful config (a named bundle of notification URLs):
    curl -X POST http://localhost:8000/add/mykey -d 'urls=mailto://user:pass@gmail.com'
    
  3. Send a notification through it:
    curl -X POST http://localhost:8000/notify/mykey -d 'body=hello&title=test'
    
  4. One-shot stateless notify (no saved config):
    curl -X POST http://localhost:8000/notify -d 'urls=json://localhost&body=hi&title=test'
    

Useful environment variables

Variable Default Purpose
TZ America/New_York Timezone for log timestamps
APPRISE_WORKER_COUNT (2*CPUs)+1 gunicorn worker count
APPRISE_WORKER_TIMEOUT 300 gunicorn worker timeout (seconds)
APPRISE_BASE_URL (none) Mount under a URL prefix, e.g. /apprise
APPRISE_STATEFUL_MODE simple simple, hash, or disabled

Get source files

dockermgr download src casjaysdevdocker/apprise

OR

git clone "https://github.com/casjaysdevdocker/apprise" "$HOME/Projects/github/casjaysdevdocker/apprise"

Build container

cd "$HOME/Projects/github/casjaysdevdocker/apprise"
buildx 

Authors

🤖 casjay: Github 🤖
casjaysdevdocker: Github Docker

S
Description
Repo for apprise
Readme 215 KiB
Languages
Shell 93.6%
Dockerfile 6.4%