Docker存储目录问题,如何修改Docker默认存储位置?(Docker存储路径、Docker存储空间)etc/docker/daemon.json

文章目录

  • 如何更改docker默认存储路径?
    • 版本1(没测试)
    • 版本2(可行)
      • [1. 停止 Docker 服务:](#1. 停止 Docker 服务:)
      • [2. 创建新的存储目录:](#2. 创建新的存储目录:)
      • [3. 修改 Docker 配置文件:](#3. 修改 Docker 配置文件:)
      • [4. 移动现有的 Docker 数据:](#4. 移动现有的 Docker 数据:)
      • [5. 重新启动 Docker 服务:](#5. 重新启动 Docker 服务:)
      • [6. 验证修改](#6. 验证修改)
      • [7. 真实验证(记录各时间点和存储占用)](#7. 真实验证(记录各时间点和存储占用))
        • [Thu 11 Jul 2024 01:33:57 PM CST(`/`Available 27445M)](#Thu 11 Jul 2024 01:33:57 PM CST(/Available 27445M))
        • [Thu 11 Jul 2024 04:04:38 PM CST(`/`Available 27444M)](#Thu 11 Jul 2024 04:04:38 PM CST(/Available 27444M))
        • [Fri 12 Jul 2024 01:51:59 PM CST(`/`Available 27444M)](#Fri 12 Jul 2024 01:51:59 PM CST(/Available 27444M))
  • [为什么存在以上两种修改方法,有何异同?(修改`etc/systemd/system/docker.service.d/override.conf`和修改`etc/docker/daemon.json` )](#为什么存在以上两种修改方法,有何异同?(修改etc/systemd/system/docker.service.d/override.conf和修改etc/docker/daemon.json ))

如何更改docker默认存储路径?

版本1(没测试)

默认情况下,Docker 在 Linux 上安装时会将其数据(如镜像和容器)存储在 /var/lib/docker 目录下,这个目录通常位于根分区 /。如果你的根分区 / 的空间不足,你可以考虑将 Docker 的数据目录移动到其他分区,或者在安装 Docker 时直接配置它使用其他分区。

要更改 Docker 的默认存储位置,你可以通过修改 Docker 的配置文件或在启动 Docker 服务时设置环境变量来指定新的数据目录。下面是一些步骤说明如何进行配置:

  1. 停止 Docker 服务:

    bash 复制代码
    sudo systemctl stop docker
  2. 修改 Docker 配置文件(如果你使用的是 systemd):

    • 打开或创建 Docker 的 systemd 配置文件(一开始没有这个文件是正常的):

      bash 复制代码
      sudo vi /etc/systemd/system/docker.service.d/override.conf
    • 添加以下内容来指定新的数据目录,假设你想将数据存储在 /mnt/docker/

      ini 复制代码
      [Service]
      ExecStart=
      ExecStart=/usr/bin/dockerd --data-root /mnt/docker -H fd:// --containerd=/run/containerd/containerd.sock
    • 保存并关闭文件。

  3. 重新加载 systemd 配置并重新启动 Docker 服务:

    bash 复制代码
    sudo systemctl daemon-reload
    sudo systemctl start docker
  4. 检查 Docker 是否使用新的数据目录:

    bash 复制代码
    docker info | grep "Docker Root Dir"

确保新的数据目录所在的分区有足够的空间,以避免在使用 Docker 时遇到空间不足的问题。

版本2(可行)

要修改 Docker 的存储路径至 /data/docker,您可以按照以下步骤操作:

1. 停止 Docker 服务:

打开终端,使用以下命令停止 Docker 服务:

bash 复制代码
sudo systemctl stop docker.socket
sudo systemctl stop docker

一开始只执行一条停不了:

后面两条执行就能停了:

2. 创建新的存储目录:

如果 /data/docker 目录还不存在,使用以下命令创建它:

bash 复制代码
sudo mkdir -p /data/docker

3. 修改 Docker 配置文件:

编辑 Docker 的 daemon 配置文件 /etc/docker/daemon.json。如果该文件不存在,您需要创建它。

bash 复制代码
sudo vi /etc/docker/daemon.json

在文件中添加或修改以下内容:

json 复制代码
{
  "data-root": "/data/docker"
}

保存并关闭文件。

4. 移动现有的 Docker 数据:

如果您的 Docker 安装中已经有数据,并且您希望保留这些数据,可以将现有的数据移动到新的目录:

bash 复制代码
sudo rsync -aP /var/lib/docker/ /data/docker

5. 重新启动 Docker 服务:

使用以下命令重新启动 Docker 服务:

bash 复制代码
sudo systemctl start docker.socket
sudo systemctl start docker

6. 验证修改

检查 Docker 是否正确使用新的存储路径,可以查看 Docker 信息:

bash 复制代码
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. 真实验证(记录各时间点和存储占用)

通过使用一下两条命令:

python 复制代码
date
df -BM
Thu 11 Jul 2024 01:33:57 PM CST(/Available 27445M)
python 复制代码
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)
python 复制代码
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)
python 复制代码
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.jsonetc/systemd/system/docker.service.d/override.conf 来实现,两种方式都是正确的,但它们有不同的用途和适用情况:

  1. 修改 /etc/docker/daemon.json

    • 这种方法通过 Docker 的配置文件来设置 Docker 的默认行为,包括存储位置、日志级别、网络配置等。

    • 要修改存储位置,你可以在 daemon.json 文件中设置 data-root 属性,指向新的存储路径。例如:

      json 复制代码
      {
        "data-root": "/new/path/to/docker-data"
      }
    • 这种方法的优点是配置简单,且直接通过 Docker 自己的配置文件进行管理,易于理解和维护。

  2. 修改 /etc/systemd/system/docker.service.d/override.conf

    • 这种方法适用于在使用 systemd 管理 Docker 服务的系统上。通过 systemd 的配置覆盖文件来修改 Docker 服务的启动参数。

    • 你可以通过创建或修改 override.conf 文件,添加一个新的 ExecStart 行,指定新的存储位置。例如:

      py 复制代码
      [Service]
      ExecStart=
      ExecStart=/usr/bin/dockerd --data-root /new/path/to/docker-data
    • 注意,需要先清空原有的 ExecStart 设置(ExecStart=),然后重新定义。这样可以确保使用你的自定义设置启动 Docker。

    • 这种方法允许你对 Docker 的启动过程进行更细粒度的控制,但相对复杂,需要对 systemd 的配置有一定了解。

总结 :选择哪种方法取决于你的具体需求和你对系统的控制级别。如果你希望通过 Docker 自身的配置来管理,使用 daemon.json 是更直接的方法。如果你需要更复杂的配置或者想要控制服务的启动参数,使用 systemd 的 override.conf 方法会更合适。

相关推荐
晚枫20004 分钟前
启动kafka
分布式·docker·zookeeper·kafka
沓沓7812 小时前
Springsecurity中的Eureka报错:Cannot execute request on any known server
后端·云原生·eureka
[听得时光枕水眠]4 小时前
【Docker】安装Docker环境遇到的坑(VirtualBox)
java·docker·容器
驾驭人生4 小时前
离线安装docker、docker-compose
docker·容器·eureka
是小白_鸭7 小时前
docker 里 oneapi 启动失败:failed to get gpt-3.5-turbo token encoder
docker·gpt-3·oneapi
真是适合睡觉的天气8 小时前
CentOS Docker搭建Mysql5.7集群
linux·mysql·docker·centos·集群
lj9077226448 小时前
centos彻底卸载docker服务
docker·容器
Json____13 小时前
linux系统使用 docker 来部署web环境 nginx+php7.4 并配置称 docker-compose-mysql.yml 文件
linux·nginx·docker·虚拟化·php7.4·网站部署·web 环境
Jessica小戴15 小时前
Dockerfile
分布式·docker
Java小卷15 小时前
docker基本环境搭建
运维·docker·容器