23 Agustus 2026
Watchtower dan Risiko Otomasi Update Container
Watchtower memantau image container Docker dan memperbaruinya otomatis. Praktis untuk homelab, tapi otomasi tanpa scope bisa melahirkan breaking change. Catatan ini membahas cara kerja, strategi mengendalikan risiko, dan batasannya.
Watchtower adalah alat otomasi yang memantau container Docker yang sedang berjalan dan memperbaruinya secara otomatis ketika image baru diunggah ke image registry. Di homelab, sebagian besar service berjalan dari image :latest yang jarang di-patch manual; Watchtower menutup celah itu sekaligus membuka celah baru: update yang terjadi tanpa ada yang mengawasi. Artikel ini catatan tentang cara kerjanya, deployment-nya, dan risiko yang harus dikendalikan.
Mengapa otomasi update menarik
Masalah nyata yang dijawab Watchtower adalah pekerjaan rutin yang gampang tertunda: docker compose pull lalu recreate service satu per satu. Dengan belasan service, versi image terus menua dan patch keamanan dari upstream tidak pernah sampai ke container. Watchtower menggantikan ritual mingguan itu: ia memeriksa registry secara berkala dan mengganti image tanpa perlu SSH ke server tiap minggu.
Otomasi ini tersedia dalam satu container kecil berbasis Go dan memang dirancang untuk konteks ini — README resminya menyebut target pemakaian untuk homelab, media center, dan lingkungan dev lokal, dan secara eksplisit bukan production.
Cara Kerja Watchtower
- Watchtower berjalan sebagai container yang terhubung ke Docker API lewat
/var/run/docker.sock. - Secara default ia polling registry tiap
86400detik (24 jam). Untuk tiap container, ia membandingkan digest image lokal dengan digest di registry (HEAD request); jika tidak berubah, tidak ada pull. - Jika digest berubah, image baru di-pull, container lama dihentikan secara graceful, lalu container dibuat ulang dengan argumen dan volume yang sama persis.
- Bila flag
--cleanupdiberikan, image lama ikut dibersihkan setelah update.
Jadwal bisa diubah: --interval memakai detik, atau --schedule memakai ekspresi cron 6-field — cukup salah satu, tidak boleh keduanya. --run-once menjalankan satu kali percobaan update lalu keluar; --rolling-restart me-restart container satu per satu alih-alih semua sekaligus.
Deployment dengan Docker Compose
Konfigurasi standar Watchtower dengan pembersihan image lama (--cleanup) dan interval pemindaian 24 jam (86400 detik):
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
command: ["--cleanup", "--interval", "86400"]
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Mount docker.sock adalah syarat utama: tanpa itu Watchtower tidak bisa memakai Docker API. Untuk registry privat, beri environment variable REPO_USER dan REPO_PASS, atau mount $HOME/.docker/config.json ke /config.json di dalam container. Mayoritas flag juga punya padanan environment variable WATCHTOWER_*, misalnya WATCHTOWER_POLL_INTERVAL menggantikan --interval.
Mengendalikan Risiko Update Otomatis
Update otomatis tanpa batas scope adalah breaking change yang datang tanpa aba-aba. Strategi yang saya pakai:
- Label scoping. Tambahkan
--label-enablepada Watchtower agar ia hanya memproses container yang di-opt-in eksplisit:labels: - "com.centurylinklabs.watchtower.enable=true" - Kecualikan container stateful. Basis data (PostgreSQL, MySQL) dan infrastruktur core sebaiknya di-exclude, baik dengan tidak memberi label maupun memakai
--disable-containers(daftar nama dipisah koma). - Mode monitor-only.
--monitor-onlymembuat Watchtower hanya mengecek dan memberitahu tanpa update; bisa diterapkan per-container lewat labelcom.centurylinklabs.watchtower.monitor-only=true. Berguna untuk observasi sebelum mempercayakan otomasi. - Notifikasi. Set
--notification-url(Shoutrrr) agar tiap update atau kegagalan tercatat, misalnya ke layanan chat yang didukung — penting karena update berjalan tanpa pengawasan. - Batas waktu graceful shutdown. Default tunggu 10 detik sebelum force kill;
--stop-timeout 30smemberi aplikasi waktu lebih panjang untuk menutup bersih.
Recovery: update bukan pengganti backup. Named volume tidak disentuh Watchtower, tetapi jika image baru bermasalah, rollback berarti pin ke tag atau commit image sebelumnya. Menyimpan compose di git memastikan konfigurasi lama selalu bisa dikembalikan.
Batasan dan Kontra
- Breaking change di balik
:latest. Tag floating tidak menjanjikan kompatibilitas; container yang kemarin sehat bisa gagal start setelah recreate. - Secara resmi bukan untuk production. README proyek eksplisit tidak merekomendasikan Watchtower untuk lingkungan komersial/produksi; untuk itu Kubernetes atau release pipeline yang dijawab.
- Akses
docker.sockpenuh. Watchtower butuh kontrol penuh atas Docker daemon; jika image Watchtower atau registry terkontaminasi, dampaknya setara root di host. - Rate limit registry. Polling dan pull ke Docker Hub secara anonim berpotensi kena rate limit, terutama saat banyak image berubah bersamaan.
- Status pemeliharaan. Repository resmi menyatakan proyek ini tidak lagi dirawat (per diskusi #2135 di repo); fork komunitas masih menerbitkan rilis, tapi hal ini patut diperhitungkan dalam perencanaan.
Kesimpulan
Watchtower tetap alat yang praktis untuk homelab: patch keamanan benar-benar sampai ke service non-kritis tanpa kerja manual, selama scope dibatasi label, container stateful di-exclude, dan notifikasi dipasang. Ia bukan jawaban untuk production, dan otomasi ini tidak mengurangi kewajiban backup data — ia hanya menutup satu tugas rutin dengan risiko yang harus dikelola secara sadar.
