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.
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.
path — path to sqlite database where creation and last check dates for each container are stored (default data.db)
database:
path: data.db
console — console logging configuration
level— logging level [debug,info,warn,error,fatal] (defaultinfo)
file — file logging configuration
directory— directory containing up to four 10 MB log files, leave empty if no file logging is desired (defaultlogs)level— logging level [debug,info,warn,error,fatal] (defaultdebug)
logging:
console:
level: info
file:
directory: logs
level: debug
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
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
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
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 updatesimage_success— successful image pullcontainer_success— successful container recreation with new image
Extra data depending on webhook type
author — author info, not required
name— author nameurl— hyperlink when clicking the author name, e.g. server webui urlicon_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
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