映像、Volume 與網路
這三頁解決兩類問題:服務連不到彼此,以及磁碟莫名其妙被吃光。它們對應 docker images、docker volume、docker network。
映像(Images)
映像是容器的唯讀範本。Stacks 或 Containers 部署時,若本機沒有該映像,Docker 會從 Registry 拉取。
實務上常做的事:
- 看有哪些映像、佔多少空間:測試拉過一堆
latest之後,這裡會很肥。 - Pull:先更新映像,再讓 Stack 重新部署,容器才會用到新版本。只按容器 Restart 不會自動換成 Registry 上的新映像。
- Unused / dangling:沒被任何容器使用的映像可以清。清之前確認沒有「沒在跑、但還想留著快速啟動」的容器依賴它。
私人 Registry 要先在 Portainer 設定帳密,否則 Pull 會失敗,log 看起來像網路錯誤。
Volume
Named volume 由 Docker 管理,路徑在主機的 Docker 資料目錄裡。資料庫、Portainer 自己的 portainer_data 都屬這類。
- 刪容器預設不刪 Volume,所以資料庫還在是正常的。
- 刪 Stack 後磁碟沒變小,先來看有沒有漏刪的 Volume。
- 備份應用資料,備份的是 Volume(或 bind mount 的主機目錄),不是容器。
Bind mount 不會都出現在 Volumes 清單。要改家用設定檔,到主機對應目錄編輯,或在 Stack YAML 裡改路徑後重新部署。
網路(Networks)
同一個 Compose Stack 裡的服務,通常會自動加入該 Stack 的網路,用服務名稱當主機名稱互連(例如 db、web)。這比把所有容器都放在 bridge 上再用 IP 互指可靠。
對外開放的是 ports: 對應。只讓內部互連、不要對主機開放的服務,就不要寫 ports,只留在同一網路裡。
跨 Stack 互連時,可建立一個外部網路(external network),兩個 Stack 都加入。不要為了圖方便把所有容器接到 host 網路,除錯與埠衝突會變難。
清理順序
磁碟滿了,建議順序:
- Images 裡未使用的映像
- 已停止且確定不要的容器
- 確認沒有應用在用的 Volume
- 未使用的網路
Portainer 各頁多半有「unused」篩選或刪除 unused 的動作。清 Volume 前沒備份,資料就真的沒了。