{"id":47982403,"url":"https://github.com/amayer1983/docksentry","last_synced_at":"2026-04-26T12:01:25.113Z","repository":{"id":349120217,"uuid":"1201133550","full_name":"amayer1983/docksentry","owner":"amayer1983","description":"Docker container update manager with Telegram bot, Discord, Web UI, auto-rollback, and 16 languages","archived":false,"fork":false,"pushed_at":"2026-04-19T20:15:32.000Z","size":2752,"stargazers_count":26,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-19T21:19:38.402Z","etag":null,"topics":["auto-update","container","discord","docker","docker-compose","notifications","rollback","selfhosted","telegram","update","web-ui","webhook"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amayer1983.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-04T08:57:11.000Z","updated_at":"2026-04-19T20:15:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/amayer1983/docksentry","commit_stats":null,"previous_names":["amayer1983/docksentry"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/amayer1983/docksentry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amayer1983%2Fdocksentry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amayer1983%2Fdocksentry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amayer1983%2Fdocksentry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amayer1983%2Fdocksentry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amayer1983","download_url":"https://codeload.github.com/amayer1983/docksentry/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amayer1983%2Fdocksentry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32296259,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto-update","container","discord","docker","docker-compose","notifications","rollback","selfhosted","telegram","update","web-ui","webhook"],"created_at":"2026-04-04T11:12:02.020Z","updated_at":"2026-04-26T12:01:25.106Z","avatar_url":"https://github.com/amayer1983.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/amayer1983/docksentry/main/docs/images/logo.png\" alt=\"Docksentry Logo\" width=\"200\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eDocksentry\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\nYour Docker container watchdog — monitors images for updates and lets you manage them via \u003cb\u003eTelegram\u003c/b\u003e, \u003cb\u003eDiscord\u003c/b\u003e, \u003cb\u003eWeb UI\u003c/b\u003e, and \u003cb\u003eWebhooks\u003c/b\u003e, with auto-rollback and 16 languages.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/docker/pulls/amayer1983/docksentry\" alt=\"Docker Pulls\"\u003e\n  \u003cimg src=\"https://img.shields.io/docker/image-size/amayer1983/docksentry\" alt=\"Docker Image Size\"\u003e\n  \u003cimg src=\"https://img.shields.io/github/license/amayer1983/docksentry\" alt=\"License\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/amayer1983/docksentry/main/docs/images/telegram-update-notification.jpg\" alt=\"Update Notification\" width=\"350\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/amayer1983/docksentry/main/docs/images/telegram-update-result.jpg\" alt=\"Update Result\" width=\"350\"\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Automatic update detection** — compares image digests on a configurable cron schedule\n- **Telegram bot** — full interactive control with inline buttons and 14 commands\n- **Discord notifications** — rich embeds for updates, successes, and failures\n- **Generic webhooks** — JSON POST to Ntfy, Gotify, Home Assistant, or any HTTP endpoint\n- **Optional Web UI** — dashboard with status, logs, history, settings, pin/unpin, auto-update toggles\n- **Per-container auto-update** — selected containers update without confirmation\n- **Pin/Freeze containers** — exclude containers from updates\n- **Auto-rollback** — failed updates automatically restore the previous container\n- **Docker Compose support** — native `docker compose pull/up` for Compose stacks\n- **Self-update** — the bot can update itself automatically\n- **Persistent settings** — Web UI changes survive restarts\n- **Multi-language** — 16 languages, switchable at runtime\n- **Lightweight** — Python standard library only, zero external dependencies\n\n## Quick Start\n\n### 1. Create a Telegram Bot\n\nMessage [@BotFather](https://t.me/BotFather) → `/newbot` → copy the token.\n\n### 2. Get your Chat ID\n\nSend a message to your bot, then open `https://api.telegram.org/bot\u003cTOKEN\u003e/getUpdates` and find your `chat.id`.\n\n### 3. Run\n\n```bash\ndocker run -d \\\n  --name docksentry \\\n  --restart unless-stopped \\\n  -e BOT_TOKEN=your-bot-token \\\n  -e CHAT_ID=your-chat-id \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  amayer1983/docksentry:latest\n```\n\n### Docker Compose\n\n```yaml\nservices:\n  docksentry:\n    image: amayer1983/docksentry:latest\n    container_name: docksentry\n    restart: unless-stopped\n    environment:\n      - BOT_TOKEN=your-bot-token\n      - CHAT_ID=your-chat-id\n      - CRON_SCHEDULE=0 18 * * *\n      - TZ=Europe/Berlin\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock\n      - docksentry_data:/data\n    security_opt:\n      - no-new-privileges:true\n\nvolumes:\n  docksentry_data:\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `/status` | Container overview with health, uptime, images |\n| `/check` | Manually trigger an update check |\n| `/updates` | Show pending updates |\n| `/logs \u003cname\u003e` | Show last 30 log lines of a container |\n| `/pin \u003cname\u003e` | Pin container — excluded from updates |\n| `/unpin \u003cname\u003e` | Unpin container |\n| `/autoupdate \u003cname\u003e` | Toggle auto-update per container |\n| `/history` | Show update history |\n| `/cleanup` | Remove old unused images |\n| `/selfupdate` | Update the bot itself |\n| `/debug` | Toggle debug mode |\n| `/lang \u003ccode\u003e` | Switch language |\n| `/settings` | Show current configuration |\n| `/help` | Show all commands |\n\n\u003e Partial name matching: `/pin ngi` matches `nginx`.\n\n## Configuration\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `BOT_TOKEN` | *required* | Telegram Bot API token |\n| `CHAT_ID` | *required* | Your Telegram chat ID |\n| `CRON_SCHEDULE` | `0 18 * * *` | Cron expression for scheduled checks |\n| `EXCLUDE_CONTAINERS` | | Comma-separated names to exclude |\n| `AUTO_SELFUPDATE` | `false` | Auto-update the bot on each check |\n| `LANGUAGE` | `en` | Bot language ([16 available](docs/languages.md)) |\n| `WEB_UI` | `false` | Enable web dashboard |\n| `WEB_PORT` | `8080` | Web UI port |\n| `WEB_PASSWORD` | | Web UI password (Basic Auth) |\n| `TELEGRAM_TOPIC_ID` | | Telegram topic/thread ID (for groups with topics) |\n| `DISCORD_WEBHOOK` | | Discord webhook URL |\n| `WEBHOOK_URL` | | Generic webhook URL (JSON POST) |\n| `TZ` | `Europe/Berlin` | Timezone |\n| `DOCKER_HOST` | | Docker API endpoint (for [socket proxy](docs/security.md)) |\n| `DOCKER_API_VERSION` | | Force Docker API version (e.g. `1.43` for Synology/older Docker) |\n| `DOCKSENTRY_IPV6` | `false` | Enable IPv6 outbound connections (default: IPv4-only to avoid `Network unreachable` in containers without IPv6 routing) |\n\nAll settings except BOT_TOKEN and CHAT_ID can also be changed via the Web UI and persist across restarts.\n\n\u003e **Synology / NAS users:** If Docksentry shows 0 containers, add `DOCKER_API_VERSION=1.43` to your environment variables.\n\n## Web UI\n\nEnable with `WEB_UI=true`. Provides status dashboard, container logs, update history, and full settings management — all in a dark-themed, mobile-responsive interface.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/amayer1983/docksentry/main/docs/images/webui-status.png\" alt=\"Web UI Status\" width=\"700\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/amayer1983/docksentry/main/docs/images/webui-logs.png\" alt=\"Web UI Logs\" width=\"700\"\u003e\n\u003c/p\u003e\n\nSee [Web UI Documentation](docs/web-ui.md) for details.\n\n## Notification Channels\n\n| Channel | Updates | Results | Interactive |\n|---------|:-:|:-:|:-:|\n| **Telegram** | buttons | detailed | full control |\n| **Discord** | rich embeds | rich embeds | via Web UI |\n| **Webhook** | JSON | JSON | via Web UI |\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/amayer1983/docksentry/main/docs/images/discord.png\" alt=\"Discord Notifications\" width=\"400\"\u003e\n\u003c/p\u003e\n\nSee [Notification Setup](docs/notifications.md) for Discord and Webhook configuration.\n\n## Documentation\n\n| Topic | Link |\n|-------|------|\n| Update Workflow \u0026 Rollback | [docs/updates.md](docs/updates.md) |\n| Web UI | [docs/web-ui.md](docs/web-ui.md) |\n| Notification Channels | [docs/notifications.md](docs/notifications.md) |\n| Docker Compose Support | [docs/compose.md](docs/compose.md) |\n| Security \u0026 Socket Proxy | [docs/security.md](docs/security.md) |\n| Multi-Language | [docs/languages.md](docs/languages.md) |\n\n## Contributing\n\n- **Feature ideas?** Open an [Issue](https://github.com/amayer1983/docksentry/issues) with the label `enhancement`\n- **Found a bug?** Open an [Issue](https://github.com/amayer1983/docksentry/issues) with steps to reproduce\n- **Translations?** Submit a PR for `app/lang/*.json`\n- **Vote on the roadmap:** [Community Roadmap (Issue #2)](https://github.com/amayer1983/docksentry/issues/2)\n\n## License\n\nMIT License - see [LICENSE](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famayer1983%2Fdocksentry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famayer1983%2Fdocksentry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famayer1983%2Fdocksentry/lists"}