A webpage showing available image updates for your running containers.
Checking for new images at startup, once a day and via the button "Check for updates".
If dont want gui, just ignore publishing ports.
working on a non-gui version.
Based on mag37/dockcheck
All cred goes to Mag37 making this amazing script!
This image use dockcheck provided by Mag37.
regclient/regctl (Licensed under Apache-2.0 License)
inotify-tools (Licensed under GPL-2.0 License)
APPRISE (Licensed under BSD 3-Clause License)
docker-compose.yml
version: '3.2'
services:
dcw:
container_name: dcw
image: 'palleri/dcw:latest'
hostname: DCW # optional, the hostname will be displayed in the ui
restart: unless-stopped
ports:
- '80:80'
- '5432:5432' # only required with exporters // communication between DCW and exporters
volumes:
- ./data:/var/www/html
- /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/localtime:/etc/localtime:ro
environment:
TOKEN: superSecretPassw0rd # required // Also used by the exporter
NOTIFY: "true" # optional
NOTIFY_URLS: "discord:https://Dockcheck@xxxxx/xxxxxx" # optional
NOTIFY_DEBUG: true # optional
HTTP_PROXY: "https://proxy.homelab.net:3128" # optional
HTTPS_PROXY: "https://proxy.homelab.net:3128" # optional
EXCLUDE: "nginx,plex,prowlarr" # optional // Exclude containers from being checked for updates
CRON_TIME: "12:56" # optional
The container and exporter are communicating via port tcp/5432
For more security add the :ro to volumes docker.sock
Use with care, make sure you keep this container safe and do not publish on the internet.
This image use apprise for notifications
Set NOTIFY: true
to enable notifications
Set NOTIFY_DEBUG: true
to enable DEBUG mode. Be carefull, your tokens and passwords might be visible in docker logs
Set NOTIFY_URLS: "tgram:https://0123456789:RandomLettersAndNumbers-2morestuff-123456789"
Set EXCLUDE: "nginx,plex,prowlarr"
if you want to exclude containers from being checked for updates
Use the name on each container in comma separated variable
Start a chat with @BotFather
and follow the guided steps.
Create a new bot: /newbot
Nickname: PumpkinsInShorts
Username: CuriousPlumber
Note down the token replied: Use this token to access the HTTP API:
0123456789:RandomLettersAndNumbers-2morestuff
Now create a new group in Telegram, invite the bot with it's username @CuriousPlumber
When in the group, note down the end of the url, eg web.telegram.org/z/#-123456789
-> -123456789
If only using the phone app, invite @RawDataBot
to the group and it'll post the id.
Then finally combine the token + the ID of the chatgroup, in this example:
0123456789:RandomLettersAndNumbers-2morestuff-123456789
Add that row to the docker-compose.yml
version: '3.2'
services:
...
environment:
NOTIFY: "true"
NOTIFY_URLS: "tgram:https://0123456789:RandomLettersAndNumbers-2morestuff-123456789"
...
Remove the api/webhook
from https://discord.com/api/webhooks/xxxxx/xxxxxx
To this discord:https://xxxxx/xxxxxx
Or use it as it is https://discord.com/api/webhooks/xxxxx/xxxxxx
version: '3.2'
services:
...
environment:
NOTIFY: "true"
NOTIFY_URLS: "discord:https://Dockcheck-web@xxxxx/xxxxxx"
...
version: '3.2'
services:
...
environment:
NOTIFY: "true"
NOTIFY_URLS: "discord:https://Dockcheck-web@xxxxx/xxxxxx tgram:https://0123456789:RandomLettersAndNumbers-2morestuff-123456789"
...
Service | Tested | Result |
---|---|---|
Discord | 2023-02-24 | ✔️ |
2023-02-24 | ✔️ | |
Telegram | 2023-02-24 | ✔️ |
Gotify | 2023-02-25 | ✔️ |
Matrix | 2023-02-26 | ✔️ |
HomeAssistant | 2023-02-26 | ✔️ |
Notification Service | Service ID | Default Port | Example Syntax |
---|---|---|---|
Apprise API | apprise:https:// or apprises:https:// | (TCP) 80 or 443 | apprise:https://hostname/Token |
AWS SES | ses:https:// | (TCP) 443 | ses:https://user@domain/AccessKeyID/AccessSecretKey/RegionName ses:https://user@domain/AccessKeyID/AccessSecretKey/RegionName/email1/email2/emailN |
Bark | bark:https:// | (TCP) 80 or 443 | bark:https://hostname bark:https://hostname/device_key bark:https://hostname/device_key1/device_key2/device_keyN |
Boxcar | boxcar:https:// | (TCP) 443 | boxcar:https://hostname boxcar:https://hostname/@tag boxcar:https://hostname/device_token boxcar:https://hostname/device_token1/device_token2/device_tokenN boxcar:https://hostname/@tag/@tag2/device_token |
Discord | discord:https:// | (TCP) 443 | discord:https://webhook_id/webhook_token discord:https://avatar@webhook_id/webhook_token |
Emby | emby:https:// or embys:https:// | (TCP) 8096 | emby:https://user@hostname/ emby:https://user:password@hostname |
Enigma2 | enigma2:https:// or enigma2s:https:// | (TCP) 80 or 443 | enigma2:https://hostname |
Faast | faast:https:// | (TCP) 443 | faast:https://authorizationtoken |
FCM | fcm:https:// | (TCP) 443 | fcm:https://project@apikey/DEVICE_ID fcm:https://project@apikey/#TOPIC fcm:https://project@apikey/DEVICE_ID1/#topic1/#topic2/DEVICE_ID2/ |
Flock | flock:https:// | (TCP) 443 | flock:https://token flock:https://botname@token flock:https://app_token/u:userid flock:https://app_token/g:channel_id flock:https://app_token/u:userid/g:channel_id |
Gitter | gitter:https:// | (TCP) 443 | gitter:https://token/room gitter:https://token/room1/room2/roomN |
Google Chat | gchat:https:// | (TCP) 443 | gchat:https://workspace/key/token |
Gotify | gotify:https:// or gotifys:https:// | (TCP) 80 or 443 | gotify:https://hostname/token gotifys:https://hostname/token?priority=high |
Growl | growl:https:// | (UDP) 23053 | growl:https://hostname growl:https://hostname:portno growl:https://password@hostname growl:https://password@hostname:port Note: you can also use the get parameter version which can allow the growl request to behave using the older v1.x protocol. An example would look like: growl:https://hostname?version=1 |
Guilded | guilded:https:// | (TCP) 443 | guilded:https://webhook_id/webhook_token guilded:https://avatar@webhook_id/webhook_token |
Home Assistant | hassio:https:// or hassios:https:// | (TCP) 8123 or 443 | hassio:https://hostname/accesstoken hassio:https://user@hostname/accesstoken hassio:https://user:password@hostname:port/accesstoken hassio:https://hostname/optional/path/accesstoken |
IFTTT | ifttt:https:// | (TCP) 443 | ifttt:https://webhooksID/Event ifttt:https://webhooksID/Event1/Event2/EventN ifttt:https://webhooksID/Event1/?+Key=Value ifttt:https://webhooksID/Event1/?-Key=value1 |
Join | join:https:// | (TCP) 443 | join:https://apikey/device join:https://apikey/device1/device2/deviceN/ join:https://apikey/group join:https://apikey/groupA/groupB/groupN join:https://apikey/DeviceA/groupA/groupN/DeviceN/ |
KODI | kodi:https:// or kodis:https:// | (TCP) 8080 or 443 | kodi:https://hostname kodi:https://user@hostname kodi:https://user:password@hostname:port |
Kumulos | kumulos:https:// | (TCP) 443 | kumulos:https://apikey/serverkey |
LaMetric Time | lametric:https:// | (TCP) 443 | lametric:https://apikey@device_ipaddr lametric:https://apikey@hostname:port lametric:https://client_id@client_secret |
Line | line:https:// | (TCP) 443 | line:https://Token@User line:https://Token/User1/User2/UserN |
Mailgun | mailgun:https:// | (TCP) 443 | mailgun:https://user@hostname/apikey mailgun:https://user@hostname/apikey/email mailgun:https://user@hostname/apikey/email1/email2/emailN mailgun:https://user@hostname/apikey/?name="From%20User" |
Mastodon | mastodon:https:// or mastodons:https:// | (TCP) 80 or 443 | mastodon:https://access_key@hostname mastodon:https://access_key@hostname/@user mastodon:https://access_key@hostname/@user1/@user2/@userN |
Matrix | matrix:https:// or matrixs:https:// | (TCP) 80 or 443 | matrix:https://hostname matrix:https://user@hostname matrixs:https://user:pass@hostname:port/#room_alias matrixs:https://user:pass@hostname:port/!room_id matrixs:https://user:pass@hostname:port/#room_alias/!room_id/#room2 matrixs:https://token@hostname:port/?webhook=matrix matrix:https://user:token@hostname/?webhook=slack&format=markdown |
Mattermost | mmost:https:// or mmosts:https:// | (TCP) 8065 | mmost:https://hostname/authkey mmost:https://hostname:80/authkey mmost:https://user@hostname:80/authkey mmost:https://hostname/authkey?channel=channel mmosts:https://hostname/authkey mmosts:https://user@hostname/authkey |
Microsoft Teams | msteams:https:// | (TCP) 443 | msteams:https://TokenA/TokenB/TokenC/ |
Misskey | misskey:https:// or misskeys:https:// | (TCP) 80 or 443 | misskey:https://access_token@hostname |
MQTT | mqtt:https:// or mqtts:https:// | (TCP) 1883 or 8883 | mqtt:https://hostname/topic mqtt:https://user@hostname/topic mqtts:https://user:pass@hostname:9883/topic |
Nextcloud | ncloud:https:// or nclouds:https:// | (TCP) 80 or 443 | ncloud:https://adminuser:pass@host/User nclouds:https://adminuser:pass@host/User1/User2/UserN |
NextcloudTalk | nctalk:https:// or nctalks:https:// | (TCP) 80 or 443 | nctalk:https://user:pass@host/RoomId nctalks:https://user:pass@host/RoomId1/RoomId2/RoomIdN |
Notica | notica:https:// | (TCP) 443 | notica:https://Token/ |
Notifico | notifico:https:// | (TCP) 443 | notifico:https://ProjectID/MessageHook/ |
ntfy | ntfy:https:// | (TCP) 80 or 443 | ntfy:https://topic/ ntfys:https://topic/ |
Office 365 | o365:https:// | (TCP) 443 | o365:https://TenantID:AccountEmail/ClientID/ClientSecret o365:https://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail o365:https://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail1/TargetEmail2/TargetEmailN |
OneSignal | onesignal:https:// | (TCP) 443 | onesignal:https://AppID@APIKey/PlayerID onesignal:https://TemplateID:AppID@APIKey/UserID onesignal:https://AppID@APIKey/#IncludeSegment onesignal:https://AppID@APIKey/Email |
Opsgenie | opsgenie:https:// | (TCP) 443 | opsgenie:https://APIKey opsgenie:https://APIKey/UserID opsgenie:https://APIKey/#Team opsgenie:https://APIKey/*Schedule opsgenie:https://APIKey/^Escalation |
PagerDuty | pagerduty:https:// | (TCP) 443 | pagerduty:https://IntegrationKey@ApiKey pagerduty:https://IntegrationKey@ApiKey/Source/Component |
PagerTree | pagertree:https:// | (TCP) 443 | pagertree:https://integration_id |
ParsePlatform | parsep:https:// or parseps:https:// | (TCP) 80 or 443 | parsep:https://AppID:MasterKey@Hostname parseps:https://AppID:MasterKey@Hostname |
PopcornNotify | popcorn:https:// | (TCP) 443 | popcorn:https://ApiKey/ToPhoneNo popcorn:https://ApiKey/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/ popcorn:https://ApiKey/ToEmail popcorn:https://ApiKey/ToEmail1/ToEmail2/ToEmailN/ popcorn:https://ApiKey/ToPhoneNo1/ToEmail1/ToPhoneNoN/ToEmailN |
Prowl | prowl:https:// | (TCP) 443 | prowl:https://apikey prowl:https://apikey/providerkey |
PushBullet | pbul:https:// | (TCP) 443 | pbul:https://accesstoken pbul:https://accesstoken/#channel pbul:https://accesstoken/A_DEVICE_ID pbul:https://accesstoken/[email protected] pbul:https://accesstoken/#channel/#channel2/[email protected]/DEVICE |
Pushjet | pjet:https:// or pjets:https:// | (TCP) 80 or 443 | pjet:https://hostname/secret pjet:https://hostname:port/secret pjets:https://secret@hostname/secret pjets:https://hostname:port/secret |
Push (Techulus) | push:https:// | (TCP) 443 | push:https://apikey/ |
Pushed | pushed:https:// | (TCP) 443 | pushed:https://appkey/appsecret/ pushed:https://appkey/appsecret/#ChannelAlias pushed:https://appkey/appsecret/#ChannelAlias1/#ChannelAlias2/#ChannelAliasN pushed:https://appkey/appsecret/@UserPushedID pushed:https://appkey/appsecret/@UserPushedID1/@UserPushedID2/@UserPushedIDN |
Pushover | pover:https:// | (TCP) 443 | pover:https://user@token pover:https://user@token/DEVICE pover:https://user@token/DEVICE1/DEVICE2/DEVICEN Note: you must specify both your user_id and token |
PushSafer | psafer:https:// or psafers:https:// | (TCP) 80 or 443 | psafer:https://privatekey psafers:https://privatekey/DEVICE psafer:https://privatekey/DEVICE1/DEVICE2/DEVICEN |
reddit:https:// | (TCP) 443 | reddit:https://user:password@app_id/app_secret/subreddit reddit:https://user:password@app_id/app_secret/sub1/sub2/subN |
|
Rocket.Chat | rocket:https:// or rockets:https:// | (TCP) 80 or 443 | rocket:https://user:password@hostname/RoomID/Channel rockets:https://user:password@hostname:443/#Channel1/#Channel1/RoomID rocket:https://user:password@hostname/#Channel rocket:https://webhook@hostname rockets:https://webhook@hostname/@User/#Channel |
Ryver | ryver:https:// | (TCP) 443 | ryver:https://Organization/Token ryver:https://botname@Organization/Token |
SendGrid | sendgrid:https:// | (TCP) 443 | sendgrid:https://APIToken:FromEmail/ sendgrid:https://APIToken:FromEmail/ToEmail sendgrid:https://APIToken:FromEmail/ToEmail1/ToEmail2/ToEmailN/ |
ServerChan | schan:https:// | (TCP) 443 | schan:https://sendkey/ |
Signal API | signal:https:// or signals:https:// | (TCP) 80 or 443 | signal:https://hostname:port/FromPhoneNo signal:https://hostname:port/FromPhoneNo/ToPhoneNo signal:https://hostname:port/FromPhoneNo/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/ |
SimplePush | spush:https:// | (TCP) 443 | spush:https://apikey spush:https://salt:password@apikey spush:https://apikey?event=Apprise |
Slack | slack:https:// | (TCP) 443 | slack:https://TokenA/TokenB/TokenC/ slack:https://TokenA/TokenB/TokenC/Channel slack:https://botname@TokenA/TokenB/TokenC/Channel slack:https://user@TokenA/TokenB/TokenC/Channel1/Channel2/ChannelN |
SMTP2Go | smtp2go:https:// | (TCP) 443 | smtp2go:https://user@hostname/apikey smtp2go:https://user@hostname/apikey/email smtp2go:https://user@hostname/apikey/email1/email2/emailN smtp2go:https://user@hostname/apikey/?name="From%20User" |
Streamlabs | strmlabs:https:// | (TCP) 443 | strmlabs:https://AccessToken/ strmlabs:https://AccessToken/?name=name&identifier=identifier&amount=0¤cy=USD |
SparkPost | sparkpost:https:// | (TCP) 443 | sparkpost:https://user@hostname/apikey sparkpost:https://user@hostname/apikey/email sparkpost:https://user@hostname/apikey/email1/email2/emailN sparkpost:https://user@hostname/apikey/?name="From%20User" |
Spontit | spontit:https:// | (TCP) 443 | spontit:https://UserID@APIKey/ spontit:https://UserID@APIKey/Channel spontit:https://UserID@APIKey/Channel1/Channel2/ChannelN |
Syslog | syslog:https:// | (UDP) 514 (if hostname specified) | syslog:https:// syslog:https://Facility syslog:https://hostname syslog:https://hostname/Facility |
Telegram | tgram:https:// | (TCP) 443 | tgram:https://bottoken/ChatID tgram:https://bottoken/ChatID1/ChatID2/ChatIDN |
twitter:https:// | (TCP) 443 | twitter:https://CKey/CSecret/AKey/ASecret twitter:https://user@CKey/CSecret/AKey/ASecret twitter:https://CKey/CSecret/AKey/ASecret/User1/User2/User2 twitter:https://CKey/CSecret/AKey/ASecret?mode=tweet |
|
Twist | twist:https:// | (TCP) 443 | twist:https://pasword:login twist:https://password:login/#channel twist:https://password:login/#team:channel twist:https://password:login/#team:channel1/channel2/#team3:channel |
XBMC | xbmc:https:// or xbmcs:https:// | (TCP) 8080 or 443 | xbmc:https://hostname xbmc:https://user@hostname xbmc:https://user:password@hostname:port |
Webex Teams (Cisco) | wxteams:https:// | (TCP) 443 | wxteams:https://Token |
Zulip Chat | zulip:https:// | (TCP) 443 | zulip:https://botname@Organization/Token zulip:https://botname@Organization/Token/Stream zulip:https://botname@Organization/Token/Email |
This is what worked for me
- NOTIFY_URL: "mailtos:https://mail.server.com/?user=[email protected]&pass=xxxx"
TODO | Tested | Result | Implemented |
---|---|---|---|
ARM64 and AMD64 Support | 2023-02-23 | ✔️ | 2023-02-23 |
Slim version without webgui (Only notifications) | 2023-02-24 | ✔️ | 2023-02-26 |
Feature | Timeline | Stage |
---|---|---|
Update via webgui | Unknown (Need Help) | |
Multiple hosts one gui | 2023-03-* | Alpha |
- Update via webui
- Need help with how to make docker.sock recreate docker-compose without the need for docker-compose.yml
- Docker remote API good or bad?
- Need help with how to make docker.sock recreate docker-compose without the need for docker-compose.yml
Description | Date | Status |
---|---|---|
Cronjob not working properly |
2023-01-28 | ✔️ |
Script not running correctly |
2023-01-29 | ✔️ |
Hanging processes |
2023-01-29 | ✔️ |
Not displaying in ascending order |
2023-01-29 | ✔️ |
Blank/error text on index while script is running |
2023-01-29 | ✔️ |
Redirect error while checking for update |
2023-01-31 | ✔️ |