yacu — Yet Another Container Updater
WARNING: Still in really early development with not enough testing done. Recommended only for non-critical systems.
A simple program written in Go and available in the form of a docker container capable of updating docker containers based on the age of the latest image.
Put simply. A chosen container will only be updated if it's remote image is older than a set amount of days in order to ensure somewhat stable releases while giving the ability of automatic updates.
Configuration
A config file is optional but highly recommended.
YACU searches for a yacu.yaml config file in current working directory or uses a path passed via --config command line parameter.
In case of the docker container, yacu.yaml should be mounted in /data path of the container
File examples can be viewed in examples/config folder in this repository.
Database
path — path to sqlite database where creation and last check dates for each container are stored (default data.db)
database:
path: data.db
Logging
console — console logging configuration
level — logging level [debug, info, warn, error, fatal] (default info)
file — file logging configuration
directory — directory containing up to four 10 MB log files, leave empty if no file logging is desired (default logs)
level — logging level [debug, info, warn, error, fatal] (default debug)
logging:
console:
level: info
file:
directory: logs
level: debug
Scanner
interval — an interval using cron format (default @weekly)
image_age — how old an image should be in days before pulling and updating container (default 7)
scan_all — scan all containers on device unless explicitly disabled using yacu.enable label (default false)
scan_stopped — scan an eligible container even if it is not running (default false)
scanner:
interval: "@weekly"
image_age: 7
scan_all: false
scan_stopped: false
Updater
stop_timeout — amount of time in seconds to wait on a container to stop before forcefully killing (default 30)
remove_volumes — remove volumes when recreating a container (default false)
remove_images — remove previous image if it is unused after an update (default false)
updater:
stop_timeout: 30
remove_volumes: false
remove_images: false
Registry authentication
An array of registry authentication data, with each containing the following:
domain — registry domain that needs authentication
username — username for auth
password — password for the above username on registry
insecure — authenticate insecurely in case of local registries not using HTTPS (default false)
registries:
- domain: docker.io
username: 123
password: 123
- domain: custom_registry.tld
username: 321
password: 321
insecure: true
Webhooks
A way to send notifications on each successful or failed update
NOTE: only discord webhooks are currently implemented
url — webhook url
kind — type of data to send (default for all true)
errors — errors that occur during updates
image_success — successful image pull
container_success — successful container recreation with new image
Extra data depending on webhook type
Discord
author — author info, not required
name — author name
url — hyperlink when clicking the author name, e.g. server webui url
icon_url — custom author image url
webhooks:
discord:
url: webhook_url
author:
name: server_name
url: webui_url
icon_url: author_icon_url
kind:
critical_errors: true
container_fail: true
container_success: true
Labels
yacu.enable — allow/disallow yacu from scanning the container, bypasses scanner.scan_all [true, false]
yacu.image_age — minimum time in days that an image should be released for before pulling and recreating the container, used to bypass scanner.image_age
yacu.stop_timeout — amount of time in seconds to wait for a container to stop before forcefully killing it, used to bypass updater.stop_timeout