改变 Docker 镜像和卷存储位置有几种选项。你可以将 /var/lib/docker
设为新分区的挂载点;或者将 /var/lib/docker
符号链接到某些文件系统的路径上。以下方法涉及更新 systemd 中 docker.service
的新路径。
这种方法的风险在于,每当 Docker 升级时,更新的
docker.service
文件可能会恢复为默认设置。在这种情况下,你将无法看到当前的镜像和卷,并且需要再次更新该文件
$ sudo systemctl stop casaos*.service
$ sudo systemctl status casaos.service
○ casaos.service - CasaOS Service
Loaded: loaded (/etc/systemd/system/casaos.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Sat 2022-08-13 12:58:08 EDT; 6min ago
Process: 9812 ExecStart=/usr/bin/casaos -c /etc/casaos.conf (code=killed, signal=TERM)
Main PID: 9812 (code=killed, signal=TERM)
CPU: 2.181s
$ sudo systemctl stop docker.*
$ sudo systemctl status docker.service
○ docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Sat 2022-08-13 13:07:59 EDT; 2s ago
TriggeredBy: ○ docker.socket
Docs: https://docs.docker.com
Process: 565 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=>
Main PID: 565 (code=exited, status=0/SUCCESS)
CPU: 1min 54.225s
$ sudo systemctl status docker.socket
○ docker.socket - Docker Socket for the API
Loaded: loaded (/lib/systemd/system/docker.socket; enabled; vendor preset: enabled)
Active: inactive (dead) since Sat 2022-08-13 13:07:59 EDT; 5s ago
Triggers: ● docker.service
Listen: /run/docker.sock (Stream)
CPU: 1ms
$ sudo mkdir -p /path/to/new/location
在此例中,路径为
/path/to/new/location
。确保将其更改为实际的首选路径。
root
用户或在 sudo
权限下,更新 /lib/systemd/system/docker.service
,在以 ExecStart=
开头的行中包含 --data-root /path/to/new/location
参数。例如,如果原来的行看起来像这样
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
那么更新后应该看起来像这样
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root /path/to/new/location
/var/lib/docker
复制到新的路径。$ sudo rsync -avxP /var/lib/docker/ /path/to/new/location
以防出错需要恢复,我们实际上并未移动内容。相反,我们使用
rsync
将内容复制到新的路径。
$ sudo systemctl daemon-reload
$ sudo systemctl start docker.service
$ sudo systemctl start casaos.service
/var/lib/docker/*
以回收一些存储空间。$ sudo rm -rf /var/lib/docker/*
如果上述命令不能完全清理文件夹,尝试使用
sudo su
,然后执行rm -rf /var/lib/docker/*