将 Docker 的存储目录从默认位置(通常是 /var/lib/docker)更改到指定的目录(例如 /data/docker)是确保程序稳定运行的必要操作。以下介绍如何在 Linux 系统上更改 Docker 的存储目录。

步骤 1:停止 Docker 服务

在更改存储目录之前,必须先停止 Docker 服务,以避免数据损坏。

1
sudo systemctl stop docker

步骤 2:备份现有数据(可选)

如果你已经有一些数据(如镜像、容器等)在默认的 Docker 存储目录中,建议先备份这些数据。

1
sudo cp -a /var/lib/docker /var/lib/docker_backup

步骤 3:创建新的存储目录

创建一个新目录,用于存储 Docker 的数据。

1
sudo mkdir -p /data/docker

步骤 4:更改 Docker 的存储目录

Docker 使用 daemon.json 文件来配置存储目录。如果该文件不存在,需要创建它。
创建或编辑 daemon.json 文件
如果 /etc/docker/daemon.json 文件不存在,可以使用以下命令创建:

1
sudo nano /etc/docker/daemon.json

如果文件已经存在,直接编辑它。
添加或修改 data-root 配置
在 daemon.json 文件中,添加或修改以下内容:

1
2
3
{
"data-root": "/data/docker"
}

保存并关闭文件。

步骤 5:更改目录权限

确保 Docker 服务对新目录有适当的读写权限。

1
2
sudo chown -R root:docker /data/docker
sudo chmod -R 711 /data/docker

步骤 6:重新启动 Docker 服务

重新启动 Docker 服务,使配置生效。

1
sudo systemctl start docker

步骤 7:验证更改

验证 Docker 是否正在使用新的存储目录。
检查 Docker 的存储目录

1
sudo docker info | grep "Docker Root Dir"

输出应该显示为:

1
Docker Root Dir: /data/docker

测试 Docker 功能
拉取一个镜像并运行一个容器,确保一切正常:

1
2
sudo docker pull hello-world
sudo docker run hello-world

注意事项

  • 数据迁移(如果需要)
    如果你之前在默认目录中有数据,并且希望将这些数据迁移到新目录,可以手动移动数据:
    1
    sudo mv /var/lib/docker/* /data/docker/
    然后重新启动 Docker 服务。
  • 磁盘空间
    确保 /data 目录有足够的磁盘空间来存储 Docker 数据。
  • 权限问题
    如果在更改目录后遇到权限问题,检查 /data/docker 目录的权限,并确保 Docker 服务可以访问它。
  • 系统重启
    如果系统重启后 Docker 服务没有自动启动,检查 systemd 配置:
    1
    sudo systemctl enable docker