文章目录
如何更改docker默认存储路径?
版本1(没测试)
默认情况下,docker 在 linux 上安装时会将其数据(如镜像和容器)存储在 /var/lib/docker
目录下,这个目录通常位于根分区 /
。如果你的根分区 /
的空间不足,你可以考虑将 docker 的数据目录移动到其他分区,或者在安装 docker 时直接配置它使用其他分区。
要更改 docker 的默认存储位置,你可以通过修改 docker 的配置文件或在启动 docker 服务时设置环境变量来指定新的数据目录。下面是一些步骤说明如何进行配置:
-
停止 docker 服务:
sudo systemctl stop docker
-
修改 docker 配置文件(如果你使用的是 systemd):
- 打开或创建 docker 的 systemd 配置文件(一开始没有这个文件是正常的):
sudo vi /etc/systemd/system/docker.service.d/override.conf
- 添加以下内容来指定新的数据目录,假设你想将数据存储在
/mnt/docker/
:[service] execstart= execstart=/usr/bin/dockerd --data-root /mnt/docker -h fd:// --containerd=/run/containerd/containerd.sock
- 保存并关闭文件。
- 打开或创建 docker 的 systemd 配置文件(一开始没有这个文件是正常的):
-
重新加载 systemd 配置并重新启动 docker 服务:
sudo systemctl daemon-reload sudo systemctl start docker
-
检查 docker 是否使用新的数据目录:
docker info | grep "docker root dir"
确保新的数据目录所在的分区有足够的空间,以避免在使用 docker 时遇到空间不足的问题。
版本2(可行)
要修改 docker 的存储路径至 /data/docker
,您可以按照以下步骤操作:
1. 停止 docker 服务:
打开终端,使用以下命令停止 docker 服务:
sudo systemctl stop docker.socket
sudo systemctl stop docker
一开始只执行一条停不了:
后面两条执行就能停了:
2. 创建新的存储目录:
如果 /data/docker
目录还不存在,使用以下命令创建它:
sudo mkdir -p /data/docker
3. 修改 docker 配置文件:
编辑 docker 的 daemon 配置文件 /etc/docker/daemon.json
。如果该文件不存在,您需要创建它。
sudo vi /etc/docker/daemon.json
在文件中添加或修改以下内容:
{
"data-root": "/data/docker"
}
保存并关闭文件。
4. 移动现有的 docker 数据:
如果您的 docker 安装中已经有数据,并且您希望保留这些数据,可以将现有的数据移动到新的目录:
sudo rsync -ap /var/lib/docker/ /data/docker
5. 重新启动 docker 服务:
使用以下命令重新启动 docker 服务:
sudo systemctl start docker.socket
sudo systemctl start docker
6. 验证修改
检查 docker 是否正确使用新的存储路径,可以查看 docker 信息:
docker info | grep 'docker root dir'
现在 docker 已经成功地使用 /data/docker
作为其根目录了。至于您看到的警告信息 “warning: no swap limit support”,这是一个常见的信息,指的是您的 linux 系统上没有启用内存交换限制的支持。
在 docker 中,这种警告通常不会影响 docker 容器的正常运行,它只意味着 docker 无法强制限制容器的交换内存使用量。这通常与 linux 内核的某些配置有关,特别是 cgroup 的配置。
注意:如果不放心,可以执行mv /var/lib/docker /var/lib/docker_old
备份检测下
7. 真实验证(记录各时间点和存储占用)
通过使用一下两条命令:
date
df -bm
thu 11 jul 2024 01:33:57 pm cst(/
available 27445m)
root@ai-video-ecs-01:/userdata/tmp# date
thu 11 jul 2024 01:33:57 pm cst
root@ai-video-ecs-01:/userdata/tmp#
root@ai-video-ecs-01:/userdata/tmp#
root@ai-video-ecs-01:/userdata/tmp# df -bm
filesystem 1m-blocks used available use% mounted on
udev 32078m 0m 32078m 0% /dev
tmpfs 6425m 4m 6422m 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 38122m 8911m 27445m 25% /
tmpfs 32124m 0m 32124m 0% /dev/shm
tmpfs 5m 0m 5m 0% /run/lock
tmpfs 32124m 0m 32124m 0% /sys/fs/cgroup
/dev/loop1 64m 64m 0m 100% /snap/core20/2318
/dev/loop0 64m 64m 0m 100% /snap/core20/1828
/dev/loop2 50m 50m 0m 100% /snap/snapd/18357
/dev/loop3 39m 39m 0m 100% /snap/snapd/21759
/dev/vda2 1946m 109m 1719m 6% /boot
/dev/loop4 92m 92m 0m 100% /snap/lxd/24061
/dev/sda1 749867m 4140m 707565m 1% /ky
/dev/sda2 9401234m 2884m 8924482m 1% /data
tmpfs 6425m 0m 6425m 0% /run/user/1000
overlay 9401234m 2884m 8924482m 1% /data/docker/overlay2/c385332babdae4ee85601ffa1dd1ebe6c36fc1f618389ace09b2051731d5fa8c/merged
overlay 9401234m 2884m 8924482m 1% /data/docker/overlay2/31a24b6f39c2ea25d700754b5c9ea78574e772589690437fd60e4b60fac15c0c/merged
overlay 9401234m 2884m 8924482m 1% /data/docker/overlay2/88149e56439d9bad5b2b785f12ff77b6052c5ba369f53f9e12a38698c34615ce/merged
overlay 9401234m 2884m 8924482m 1% /data/docker/overlay2/b2171ae8eaa2b4b6bf61de50165b2e885f6e2d4373d02fd1e492cc1d2158bd9b/merged
overlay 9401234m 2884m 8924482m 1% /data/docker/overlay2/3e9af67e01934706a6712e2a6601292b105c26d5fecf82218f8d7ef65ca30b3d/merged
overlay 9401234m 2884m 8924482m 1% /data/docker/overlay2/341e8bc8f48a17d24ee4005c45cda9e121bececd2b0fea5463b337acbce64f04/merged
overlay 9401234m 2884m 8924482m 1% /data/docker/overlay2/6ee97fa0e1597535d0d70be41d5a3220c6f58ff033dba5388a53034afbeb8f5f/merged
root@ai-video-ecs-01:/userdata/tmp#
thu 11 jul 2024 04:04:38 pm cst(/
available 27444m)
hw@ai-video-ecs-01:~$ date
thu 11 jul 2024 04:04:38 pm cst
hw@ai-video-ecs-01:~$
hw@ai-video-ecs-01:~$ df -bm
filesystem 1m-blocks used available use% mounted on
udev 32078m 0m 32078m 0% /dev
tmpfs 6425m 4m 6422m 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 38122m 8911m 27444m 25% /
tmpfs 32124m 0m 32124m 0% /dev/shm
tmpfs 5m 0m 5m 0% /run/lock
tmpfs 32124m 0m 32124m 0% /sys/fs/cgroup
/dev/loop1 64m 64m 0m 100% /snap/core20/2318
/dev/loop0 64m 64m 0m 100% /snap/core20/1828
/dev/loop2 50m 50m 0m 100% /snap/snapd/18357
/dev/loop3 39m 39m 0m 100% /snap/snapd/21759
/dev/vda2 1946m 109m 1719m 6% /boot
/dev/loop4 92m 92m 0m 100% /snap/lxd/24061
/dev/sda1 749867m 4141m 707564m 1% /ky
/dev/sda2 9401234m 2886m 8924479m 1% /data
tmpfs 6425m 0m 6425m 0% /run/user/1000
fri 12 jul 2024 01:51:59 pm cst(/
available 27444m)
root@ai-video-ecs-01:/userdata/tmp# date
fri 12 jul 2024 01:51:59 pm cst
root@ai-video-ecs-01:/userdata/tmp#
root@ai-video-ecs-01:/userdata/tmp# df -bm
filesystem 1m-blocks used available use% mounted on
udev 32078m 0m 32078m 0% /dev
tmpfs 6425m 4m 6422m 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 38122m 8911m 27444m 25% /
tmpfs 32124m 0m 32124m 0% /dev/shm
tmpfs 5m 0m 5m 0% /run/lock
tmpfs 32124m 0m 32124m 0% /sys/fs/cgroup
/dev/loop1 64m 64m 0m 100% /snap/core20/2318
/dev/loop0 64m 64m 0m 100% /snap/core20/1828
/dev/loop2 50m 50m 0m 100% /snap/snapd/18357
/dev/loop3 39m 39m 0m 100% /snap/snapd/21759
/dev/vda2 1946m 109m 1719m 6% /boot
/dev/loop4 92m 92m 0m 100% /snap/lxd/24061
/dev/sda1 749867m 4154m 707550m 1% /ky
/dev/sda2 9401234m 2903m 8924463m 1% /data
tmpfs 6425m 0m 6425m 0% /run/user/1000
overlay 9401234m 2903m 8924463m 1% /data/docker/overlay2/c385332babdae4ee85601ffa1dd1ebe6c36fc1f618389ace09b2051731d5fa8c/merged
overlay 9401234m 2903m 8924463m 1% /data/docker/overlay2/31a24b6f39c2ea25d700754b5c9ea78574e772589690437fd60e4b60fac15c0c/merged
overlay 9401234m 2903m 8924463m 1% /data/docker/overlay2/88149e56439d9bad5b2b785f12ff77b6052c5ba369f53f9e12a38698c34615ce/merged
overlay 9401234m 2903m 8924463m 1% /data/docker/overlay2/b2171ae8eaa2b4b6bf61de50165b2e885f6e2d4373d02fd1e492cc1d2158bd9b/merged
overlay 9401234m 2903m 8924463m 1% /data/docker/overlay2/3e9af67e01934706a6712e2a6601292b105c26d5fecf82218f8d7ef65ca30b3d/merged
overlay 9401234m 2903m 8924463m 1% /data/docker/overlay2/341e8bc8f48a17d24ee4005c45cda9e121bececd2b0fea5463b337acbce64f04/merged
overlay 9401234m 2903m 8924463m 1% /data/docker/overlay2/6ee97fa0e1597535d0d70be41d5a3220c6f58ff033dba5388a53034afbeb8f5f/merged
root@ai-video-ecs-01:/userdata/tmp#
为什么存在以上两种修改方法,有何异同?(修改etc/systemd/system/docker.service.d/override.conf
和修改etc/docker/daemon.json
)
在修改 docker 的存储位置时,可以通过修改 etc/docker/daemon.json
或 etc/systemd/system/docker.service.d/override.conf
来实现,两种方式都是正确的,但它们有不同的用途和适用情况:
-
修改
/etc/docker/daemon.json
:- 这种方法通过 docker 的配置文件来设置 docker 的默认行为,包括存储位置、日志级别、网络配置等。
- 要修改存储位置,你可以在
daemon.json
文件中设置data-root
属性,指向新的存储路径。例如:{ "data-root": "/new/path/to/docker-data" }
- 这种方法的优点是配置简单,且直接通过 docker 自己的配置文件进行管理,易于理解和维护。
-
修改
/etc/systemd/system/docker.service.d/override.conf
:- 这种方法适用于在使用 systemd 管理 docker 服务的系统上。通过 systemd 的配置覆盖文件来修改 docker 服务的启动参数。
- 你可以通过创建或修改
override.conf
文件,添加一个新的execstart
行,指定新的存储位置。例如:[service] execstart= execstart=/usr/bin/dockerd --data-root /new/path/to/docker-data
- 注意,需要先清空原有的
execstart
设置(execstart=
),然后重新定义。这样可以确保使用你的自定义设置启动 docker。 - 这种方法允许你对 docker 的启动过程进行更细粒度的控制,但相对复杂,需要对 systemd 的配置有一定了解。
总结:选择哪种方法取决于你的具体需求和你对系统的控制级别。如果你希望通过 docker 自身的配置来管理,使用 daemon.json
是更直接的方法。如果你需要更复杂的配置或者想要控制服务的启动参数,使用 systemd 的 override.conf
方法会更合适。
发表评论