Docker 預設將映像、容器、卷資料存放於 /var/lib/docker。若安裝系統時未單獨劃分 /var 分區,根分區極易被 Docker 佔滿導致服務異常。本文提供兩種修改 Docker 資料根目錄的方法:--graph 參數法(臨時/測試)與 daemon.json 配置法(生產環境推薦)。

--graph(適用測試/臨時)# 停止 Docker
systemctl stop docker
# 指定新資料目錄啟動(會自動建立目錄、權限 0700)
docker --graph=/opt/docker -d
# 原映像/容器將不可見(路徑已變更),如需遷移請見方法二
daemon.json(生產環境標準做法)systemctl stop docker/etc/docker/daemon.json/etc/docker/daemon.json(或 /etc/sysconfig/docker 舊版){
"data-root": "/home/lib/docker",
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
關鍵鍵:"data-root": "/home/lib/docker"(Docker 17.06+ 使用 data-root,舊版用 graph)rsync -aP /var/lib/docker/ /home/lib/docker/systemctl daemon-reload
systemctl start dockerdocker info | grep "Docker Root Dir"Docker Root Dir: /home/lib/docker/etc/sysconfig/docker 寫法(參考)OPTIONS="--graph=\"/home/lib/docker\" --selinux-enabled -H fd://"
修改後 systemctl restart docker 生效。但新版 Docker (19.03+) 已棄用此檔,統一改用 daemon.json。
# 確認新目錄正常運行後,可刪除舊目錄釋放空間
rm -rf /var/lib/docker
d_type 的檔案系統(ext4、xfs、btrfs),避免 overlay2 驅動報錯。semanage fcontext -a -t container_var_lib_t "/home/lib/docker(/.*)?"restorecon -Rv /home/lib/dockerdevicemapper 驅動(舊版預設),遷移較複雜,建議先升級至 overlay2 再遷移。透過 daemon.json 修改 data-root,配合 rsync 遷移現有資料,即可在不重裝系統的前提下,將 Docker 資料移至大容量分區,徹底解決根分區空間焦慮。