因為 Docker 的資料很佔空間,預設的位置空間不太夠,需要把相關資料都移到另外一個位置,所以把搬運過程記錄下來。[1]
可以看到 systemd 是從哪個 config 檔案開啟 docker 服務。比如上面就是 /lib/systemd/system/docker.service
。
那麼,啟動 dockerd 自訂的 config 就應該放在 /lib/systemd/system/docker.service.d/docker.root.conf
確認 docker.service.d/docker.root.conf
或 docker.service
:
在 docker.root.conf
裡,修改 ExecStart
,在原本的指令下加上 argument: -g /new/docker/root
不應該直接改 docker.service
,因為這個檔案是程式自動生成,只要更新 docker 就會被改掉。docker.service.d/docker.root.conf
是不會隨著更新消失的 user config,如果原本沒有就建一個。
所以修改後 docker.root.conf
大概會長得像這樣:
改完 root dir 之後應該會需要把之前 root dir 裡的檔案都移到新的 root dir,可以用 rsync
:
-a
的意思是原封不動的複製過去,包括 permission、create time、modified time 等等。都複製完之後就可以 rm -r /var/lib/docker
把他刪掉了。
改好 config 之後要重開 deamon 才會生效。
重開 docker 後要起 container 遇到 failed to update store for object type libnetwork.network
,解法如下(似乎 private networks 都會被刪掉,需要再一一重開):[2]