An unofficial but battle‑tested way to update Docker Engine & Docker Compose on Synology NAS
Originally forked from markdumay/synology-docker
Synology ships Docker or, as they call it in later versions "Container Manager"... but it's OLD. Really old.
This repo gives you a repeatable, reversible, and reasonably safe way to:
- Update Docker Engine on Synology to the latest
- Update Docker Compose
- Escape Synology’s legacy
dblog driver - Roll back if something goes sideways
If you’re comfortable with SSH and sudo, this is for you.
This is not supported by Synology. You can absolutely break things if you ignore instructions. Always have backups.
If you use the Nvidia runtime, you may need to re‑run:
nvidia-ctk runtime configureor restart the Nvidia driver after running this script.
Portainer currently persists the original logging driver used when a container was created. This means:
- Containers created with the
dblogger will stay broken after upgrade - You must recreate them to switch to
local
👉 Fix your loggers before upgrading Docker or you’ll spend hours recreating containers anyway.
At a high level:
- Downloads official Docker & Compose binaries
- Backs up your existing Docker install
- Stops Docker safely
- Replaces binaries & config
- Restarts Docker
Everything is scripted. Nothing is magic. Rollbacks are built‑in.
SSH into your NAS and clone the repo:
git clone https://github.com/telnetdoogie/synology-docker.git
cd synology-dockerTL;DR: Fix logging → recreate containers → upgrade Docker
sudo ./syno_docker_update.sh loggerThis:
- Sets Docker’s default log driver to
local - Restarts Docker
Then check which containers are still using db:
./syno_docker_list_containers.shExample output:
Container Compose_Location Logger
------------------- ---------------------------------------------- -------
/transmission /volume1/docker/downloader/docker-compose.yml db
/jellyfin /volume1/docker/jellyfin/docker-compose.yml db
/dozzle /volume1/docker/dozzle/docker-compose.yml local
For each compose‑managed container using db:
cd /volume1/docker/jellyfin
docker-compose up -d --force-recreateRe‑run syno_docker_list_containers.sh until everything says local.
Containers created via
docker runwill show a best‑guess recreate command. Verify it before running.
sudo ./syno_docker_update.sh updateIf you did the logger step correctly, containers should come back automatically.
Once you’ve crossed the logging hurdle, updates are simple:
cd synology-docker
git pull
sudo ./syno_docker_update.sh updatesudo ./syno_docker_update.sh [OPTIONS] COMMAND| Command | Description |
|---|---|
backup |
Backup Docker binaries & config |
download PATH |
Download Docker & Compose binaries |
install PATH |
Install from downloaded files |
restore |
Restore from backup |
logger |
Update logging driver only |
update |
Full backup + update |
| Option | Description |
|---|---|
--docker VERSION |
Target Docker version |
--compose VERSION |
Target Compose version |
--backup NAME |
Backup file name |
--force |
Skip compatibility checks |
--stage |
Download only, no install |
PRs welcome.
- Fork
- Test on real hardware
- Explain why the change exists
- Original work by @markdumay
- Extensive testing by @mrmuiz
- Network‑pain endurance by @CodeNodeNomad
MIT
Forked from https://github.com/markdumay/synology-docker