Docker Synology chiếm hết ổ: dọn image, log, volume

Docker Synology chiếm hết ổ: dọn image, log, volume

Container Manager là gói chính thức của Synology để chạy container — nói nôm na là các "hộp" phần mềm đóng gói sẵn, cài vào chạy luôn, không phải lo thiếu thư viện lằng nhằng. Plex, Jellyfin, Home Ass

Xem video tóm tắt: Docker Synology chiếm hết ổ: dọn image, log, volume

Container Manager là gì, và vì sao nó âm thầm ăn hết ổ cứng

Container Manager là gói chính thức của Synology để chạy container — nói nôm na là các "hộp" phần mềm đóng gói sẵn, cài vào chạy luôn, không phải lo thiếu thư viện lằng nhằng. Plex, Jellyfin, Home Assistant, Immich... phần lớn app NAS "xịn" bây giờ đều chạy qua đường này. Trên DSM 7.1 trở về trước gói này còn tên là Docker; model không hỗ trợ Container Manager thì vẫn dùng tên cũ.

Cái hay: tải image về, chạy container, xong — không phải tự dựng môi trường như cài tay. Cái dở: chạy vài container vài tháng, ổ cứng cứ cạn dần mà mở File Station nhìn mãi chẳng thấy gì to. Lý do đơn giản — dữ liệu Docker nằm trong một thư mục hệ thống ẩn, mặc định không hiện ra.

Ba tình huống hay gặp nhất:

  • Bạn pull image latest mới của Jellyfin hay Immich vài lần để update — image cũ không tự xóa, cứ thế dồn lại, vài chục GB là chuyện thường.
  • Immich chạy qua docker-compose (Postgres + Redis + máy học nhận diện khuôn mặt + server) lâu ngày, thư mục cache thumbnail và dữ liệu nhận diện phình to — đây là dữ liệu thật, không phải Docker "bị lỗi".
  • Home Assistant hay Plex chạy container cả năm, log driver json-file không giới hạn dung lượng, âm thầm tích vài GB mà chẳng nằm trong mục Image hay Volume nào cả.

So với việc tự quản Docker trên máy Linux qua terminal, Synology cho sẵn nút "Remove Unused Images" ngay trong giao diện Container Manager — bấm vài cái là giải quyết được phần lớn trường hợp, không cần đụng tới dòng lệnh.

Sơ đồ luồng dữ liệu Docker tích tụ dần khiến ổ cứng Synology đầy

Vì sao nên dọn qua GUI trước, SSH để sau

Nghe có vẻ dân pro thì phải SSH mới "chất", nhưng với việc dọn dung lượng thì ngược lại. Nút GUI của Container Manager chỉ xóa image không gắn container nào — không đụng tới volume chứa database hay config, nên an toàn hơn hẳn việc chạy docker system prune -a -- volume s bừa qua SSH rồi tối về mới biết Immich mất sạch ảnh.

Giữ SSH tắt khi không dùng cũng là một lớp bảo mật — mở lâu dài là thêm một cửa cho kẻ dò mật khẩu. Dọn dẹp cơ bản không cần Portainer hay công cụ thứ ba nào cả.

Tiêu chíGUI (Container Manager)SSH (dòng lệnh)
Đụng tới volume/database✗✓ (nếu dùng prune -a)
Cần gõ lệnh✗✓
Rủi ro mất dữ liệuThấpCao
Phù hợp choDọn cơ bảnDọn sâu, có hiểu Docker

Bước 1: Xác nhận đúng Docker là thủ phạm

Trước khi dọn gì, kiểm tra cho chắc — đừng thấy ổ đầy là nhảy vào xóa bừa. Vào Storage Manager > Volume xem dung lượng trống còn bao nhiêu. Sau đó mở File Station, vào volume1, bấm biểu tượng Settings (bánh răng) > tick "Show hidden files" — lúc này mới thấy thư mục @docker.

Muốn biết chính xác @docker to bao nhiêu và thư mục con nào ăn nhiều nhất, SSH vào (Control Panel > Terminal & SNMP > bật SSH) rồi gõ:

sudo du -h -d1 /volume1/@docker

Lệnh này liệt kê dung lượng từng thư mục con cấp 1, giúp bạn thấy ngay image, volumes hay containers cái nào đang phình.

Apple Lisa Teardown
Ảnh: eevblog (flickr) CC BY

Bước 2: Dọn image cũ qua Container Manager

Đây là bước xử lý được phần lớn trường hợp "Docker chiếm dung lượng" do update image nhiều lần. Mở Container Manager > Image, bấm nút "Remove Unused Images". Synology sẽ quét và xóa mọi image dangling (không gắn tag, sinh ra khi build hoặc pull image cũ) cùng image không có container nào đang dùng.

Làm xong, quay lại Storage Manager xem dung lượng trống đã nhích lên chưa — nhiều trường hợp chỉ bước này đã lấy lại chục GB.

Bước 3: Dọn container đã dừng

Qua tab Container, nhìn danh sách container đã Stop từ lâu mà không dùng nữa. Chọn container đó, vào Action > Stop (nếu chưa dừng) rồi Action > Delete.

Lưu ý: xóa container không tự xóa volume dữ liệu đi kèm. Vừa là tin tốt (dữ liệu an toàn), vừa là điều cần nhớ — xóa container không giải phóng được bao nhiêu nếu phần nặng ký thật sự nằm ở volume riêng.

Bước 4: Project (docker-compose) — cẩn thận khi Down

Với stack chạy qua docker-compose như Immich, vào tab Project, chọn project, bấm Down. Container Manager sẽ hỏi có muốn tick "Remove volumes" không.

Đây là bước nguy hiểm nhất trong cả bài. Tick ô này sẽ xóa luôn volume — tức là database Postgres chứa toàn bộ metadata ảnh của Immich, hay config của Home Assistant. Chỉ tick khi bạn chắc 100% muốn xóa sạch để làm lại từ đầu. Bình thường chỉ cần Down để dừng stack, đừng đụng vào ô này.

Hard disk SATA controller
Ảnh: Christiaan Colen (flickr) CC BY-SA

Lỗi thường gặp

  • Chạy docker system prune -a --volumes qua SSH mà không kiểm tra trước — lệnh này xóa cả volume "unused", nhưng Docker coi volume của container đang stop tạm (để update) cũng là unused. Mất database Immich/Home Assistant là mất luôn, không khôi phục được. Luôn chạy docker system df -v soát kỹ trước khi thêm cờ --volumes.
  • Tick nhầm "Remove volumes" khi Down Project — mất sạch config/database của cả stack. Chỉ tick khi chắc chắn.
  • Xóa image đang gắn với container chỉ đang dừng (chưa xóa) — lần sau Start lại báo thiếu image, phải pull lại từ đầu, tốn băng thông và thời gian. Container Manager thường chặn việc này, nhưng qua SSH bằng docker rmi -f thì vẫn xóa được, cẩn thận.
  • Nhầm dung lượng do log container với dung lượng Docker — Plex hay Home Assistant chạy lâu, log driver json-file không giới hạn, tích vài GB mà chẳng phải Docker "ăn gian", chỉ là quên giới hạn log. Nút Remove Unused Images không đụng tới phần này, phải kiểm tra riêng.

Khi nào cần dọn sâu hơn qua SSH

Nếu dọn image và container xong mà ổ vẫn đầy, bật SSH lên xem breakdown chi tiết:

docker system df -v

Lệnh này cho thấy rõ Images, Containers, Local Volumes, Build Cache đang chiếm bao nhiêu — không phải đoán mò nữa. Muốn dọn thêm thì dùng hai lệnh an toàn sau:

docker image prune -a
docker container prune

docker image prune -a xóa mọi image không gắn container nào (mạnh hơn nút GUI một chút), docker container prune xóa container đã dừng. Cả hai không đụng tới volume dữ liệu, nên tương đối an toàn.

Còn docker volume prune và docker system prune -a --volumes thì để sau cùng, chỉ chạy khi đã xem kỹ output của docker system df -v và chắc chắn volume nào thật sự mồ côi. Xong việc, tắt SSH lại trong Control Panel.

Tùy chọn nâng cao (không bắt buộc)

Mấy mục dưới đây không cần cho việc dọn dẹp cơ bản — chỉ làm khi bạn muốn kiểm soát chi tiết hơn hoặc tự động hóa:

  • Cài Portainer để lọc và xóa volume mồ côi trực quan hơn: vào Container Manager > Registry, tìm portainer/portainer-ce, hoặc dán compose vào tab Project. Cổng mặc định 9000 (HTTP) / 9443 (HTTPS). Đặt mật khẩu admin mạnh, và đừng mở hai port này ra Internet trực tiếp — chỉ dùng trong LAN hoặc qua VPN.
  • Giới hạn dung lượng log container bằng cấu hình max-size trong Docker daemon — chỉ cần làm khi log thật sự là nguyên nhân chính, và đòi hỏi sửa qua SSH.
  • Lập Task Scheduler (Control Panel > Task Scheduler) chạy script dọn tự động theo lịch tuần/tháng, ví dụ gọi bash /volume1/docker/dockerprune.sh với user root, để không phải lặp lại cả quy trình này mỗi vài tháng.

Trước khi dọn mạnh tay: backup

Dùng Hyper Backup sao lưu volume database của Immich hay Home Assistant trước khi chạy bất kỳ lệnh prune mạnh tay nào qua SSH. Lệnh chạy quyền root có thể xóa dữ liệu không khôi phục được — đọc kỹ output, nhất là dòng hỏi xác nhận y/N, trước khi gõ "y".

Ổ cứng chiếm dung lượng vì Docker thì dọn trong vài phút là xong. Ổ cứng chiếm dung lượng vì database Immich 50.000 tấm ảnh bị bạn prune nhầm thì không có nút nào dọn được nữa.

Mua NAS chính hãng

Xem tất cả →

Thiết bị NAS Synology & ổ cứng chính hãng Nhật Bản — tư vấn cấu hình, lắp đặt và bảo hành. Mua qua Shopee, giao toàn quốc.

No comments yet