環境
ubuntu20.04, 普通用戶使用sudo權限。
需求
linux系統上,默認的docker跟目錄在/var/lib/docker目錄下,但是根分區太小。想要將docker根目錄挪到其它磁盤,防止以后鏡像和容器增加后磁盤滿了。
操作
先停止所有docker容器,然后停止docker服務:
systemctl stop docker
然后將/var/lib/docker復制到目標路徑下
sudo cp /var/lib/docker ./
修改/etc/docker/daemon.json, 配置新的根目錄:
{"data-root": "/mnt/data/docker"
}
然后重啟docker 服務:
systemctl start docker
最后啟動docker業務容器。
報錯
啟動mysql服務失敗,查看報錯信息:
Entrypoint] MySQL Docker Image 8.0.25-1.2.3-server
[Entrypoint] Starting MySQL 8.0.25-1.2.3-server
2025-07-21T10:08:15.192097Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.25) starting as process 1
2025-07-21T10:08:15.213123Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysqld: Can't create/write to file '/tmp/ibUi25Ct' (OS errno 13 - Permission denied)
2025-07-21T10:08:15.282413Z 1 [ERROR] [MY-012576] [InnoDB] Unable to create temporary file; errno: 13
2025-07-21T10:08:15.282588Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
2025-07-21T10:08:15.282799Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2025-07-21T10:08:15.283226Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2025-07-21T10:08:15.283609Z 0 [ERROR] [MY-010119] [Server] Aborting
錯誤分析
主要是權限問題。猜測是docker跟目錄中的某些目錄權限被改變了。
解決辦法
復制的時候加-a,保留目錄權限
sudo cp /var/lib/docker ./ -a
使用nfs目錄存儲docker根目錄的問題
將docker根目錄復制到nfs目錄報錯
使用nfs掛載了一個遠程的磁盤,希望將docker根目錄復制進去節省本地磁盤,結果出錯了:
$ sudo cp /var/lib/docker/ ./test_docker -rf
[sudo] password for xxx:
cp: cannot create special file './test_docker/docker/volumes/backingFsBlockDev': Unknown error 524
使用nfs分區新建新的根分區
如果不拷貝老的根分區目錄,直接在/etc/docker/daemon.json修改data-root指向nfs分區中的目錄。docker服務啟動起來了,但是docker load -i加載鏡像非常慢,一個小時都沒加載完一個鏡像。
總結
使用nfs分區存儲docker根目錄有問題,無論是否是新建的。應該優先將docker根目錄放物理磁盤上。