jason fbc888b5c5
apprise / release-apprise (push) Failing after 1m48s
🐛 Fix entrypoint hang and lost-interpreter bugs 🐛
- rootfs/usr/local/bin/entrypoint.sh:
  1. The "start all services" gate
     (`if [ "$START_SERVICES" = "yes" ] || [ -z "$1" ]`) always evaluated
     true on a first-run container regardless of $1, because
     START_SERVICES is force-set to "yes" whenever no PID file exists yet.
     Any command passed to `docker run` — `exec ...`, `sh -c ...`,
     `shell`, or an arbitrary program — was swallowed into the
     service-start+monitor branch before reaching the `case "$1"`
     statement that already handles those subcommands, hanging the
     container as a daemon instead of running the given command. Changed
     the condition to `if [ -z "$1" ]` so the daemon branch only fires
     when no command was given at all.
  2. The `*/bin/sh | */bin/bash | bash | sh | shell)` case branch
     unconditionally shifted $1 before `__exec_command "$@"` (a bare
     `exec "$@"`). For `docker run image sh -c 'cmd'` this turned the
     exec into `exec -c cmd` (command not found, exit 127) instead of
     `exec sh -c 'cmd'`. Split the branch: real interpreter names
     (*/bin/sh, */bin/bash, bash, sh) now pass through unshifted; the
     "shell" keyword (not a real interpreter) gets its own branch that
     shifts and prepends "sh" to any remaining args, or falls back to a
     bare `__exec_command` (exec bash -l) when none remain.
  Verified `bash -n` passes. Found and fixed upstream in
  dockersrc/go, confirmed identical in this repo's generated
  entrypoint.sh, and mechanically applied here with the same patch.
2026-07-27 23:13:36 -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-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="/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 278 KiB
Languages
Shell 94.1%
Dockerfile 5.9%