Checks running Docker containers for updated image digests and sends a Telegram notification when the detected update state changes. Scheduled runs and manual triggers are handled through Hangfire.
The app reads appsettings.json and then a local override file.
Local override file resolution:
/config/appsettings.Local.jsonif/configexists- otherwise
appsettings.Local.jsonin the application directory
If the local file does not exist yet, the app creates a starter file automatically at the resolved location on first launch.
{
"Server": {
"Port": 8080
},
"Localization": {
"Culture": "de-DE"
},
"Scheduler": {
"Cron": "0 */6 * * *",
"RunOnStartup": false
},
"Docker": {
"Endpoint": ""
},
"Telegram": {
"BotToken": "123456:replace-me",
"ChatId": "123456789"
},
"Monitoring": {
"ExcludedContainers": [ "unraid-db" ]
},
"Storage": {
"DataDirectory": "/config/data"
}
}Set Localization:Culture to a .NET culture such as de-DE or en-US to control localized date and time formatting in logs and notifications.
Set Scheduler:RunOnStartup to true if the container should execute one immediate update check after startup instead of waiting for the next cron occurrence.
- Mount the Docker socket:
/var/run/docker.sock:/var/run/docker.sock - Mount a single parent folder from the host to
/config, for example/mnt/user/appdata/dockercontainerupdatechecker:/config - The generated
appsettings.Local.jsonwill then be created at/config/appsettings.Local.json - Persistent state will be stored under
/config/data - Map a host port to the internal container port, default
8080 - The Hangfire dashboard is available at
/hangfire
The app resolves the container API endpoint in this order:
Docker:Endpointfrom configurationDOCKER_HOSTfrom the environment- Built-in default
Defaults:
- Windows:
npipe://./pipe/docker_engine - Linux:
unix:///var/run/docker.sock
Examples:
- Docker on Linux / Unraid:
unix:///var/run/docker.sock - Podman socket on Linux:
unix:///run/user/1000/podman/podman.sock - Podman or Docker via TCP:
tcp://127.0.0.1:2375
- By default, all running containers are checked
- Individual containers can be excluded through
Monitoring:ExcludedContainers - Hangfire uses in-memory storage, so dashboard history is cleared after a container restart
- The app sends a Telegram startup test notification after successful startup validation
- The last functional update state is stored separately in
/config/data/last-update-state.jsonby default so notifications remain stable across restarts
- If Telegram returns
400 Bad Request, a common reason is that the target user or group has not started a chat with the bot yet - For direct messages, open the bot in Telegram and send
/startonce before testing notifications - If the problem remains, verify that the configured
Telegram:ChatIdis correct
- Open Telegram and start a chat with
@BotFather. - Run
/newbotand follow the prompts to create a bot. - Copy the bot token from BotFather and set it as
Telegram:BotToken. - Open your new bot in Telegram and send
/startonce so the bot can message you directly. - Send any additional message to the bot, then open
https://api.telegram.org/bot<your-bot-token>/getUpdatesin a browser. - Find the
chatobject in the JSON response and copy the numericidvalue intoTelegram:ChatId.
After both values are configured, restart the app and it will send a startup test notification after successful validation.