前言

要将 Docker 镜像从内存盘(如 /dev/shmtmpfs)迁移到硬盘,需更改 Docker 的数据存储目录(data-root),以此来解决内存盘空间大小不足问题。

详细步骤:

1. ‌停止 Docker 服务‌并定位 Docker 数据目录

sudo systemctl stop docker
sudo systemctl stop docker.socket
sudo docker info | grep "Docker Root Dir"

2. ‌备份现有数据(可选但推荐)‌

如果内存盘中有重要镜像或容器,先备份到硬盘:

sudo cp -r /var/lib/docker /path/to/backup/docker_backup

3. ‌创建新的硬盘存储目录‌

选择硬盘上的目标目录(如 /home/docker):

sudo mkdir -p /home/docker

4. ‌迁移 Docker 数据到新位置‌

使用 rsync 复制数据(保留权限):

sudo rsync -av /var/lib/docker/ /home/docker/

注意‌:如果 /var/lib/docker 是内存盘,重启后数据会丢失,但迁移时需确保服务已停止。

5. ‌修改 Docker 配置文件‌

编辑配置文件 /etc/docker/daemon.json

sudo nano /etc/docker/daemon.json

添加以下内容(如文件已存在,仅添加 data-root 项):

{ "data-root": "/home/docker" }

6. ‌重启 Docker 服务‌

sudo systemctl start docker
sudo systemctl start docker.socket

7. ‌验证新存储位置‌

docker info | grep "Docker Root Dir"

输出应显示:Docker Root Dir: /home/docker

8. ‌清理旧数据(谨慎操作)‌

确认迁移成功后,删除旧内存盘数据:

sudo rm -rf /var/lib/docker/*

警告‌:确保新位置数据完整后再执行此步骤!

常见问题解决:

  1. 权限错误‌:

确保新目录权限正确:

sudo chown -R root:root /home/docker
  1. 配置文件冲突‌:

    • 检查是否存在冲突配置(如 dockerd 启动参数),确保 /etc/docker/daemon.json 是唯一指定 data-root 的地方。

  2. 磁盘空间不足‌:

    • 迁移前用 df -h 确认目标硬盘有足够空间。

附加说明:

  • 内存盘特性‌:内存盘(tmpfs)数据在重启后会丢失,迁移到硬盘可持久化存储。

  • 性能影响‌:硬盘访问速度可能低于内存盘,但对大部分场景影响不大。

  • Docker 重启后‌:系统重启时 Docker 会自动使用新位置,无需额外操作。

通过以上步骤,Docker 将永久使用硬盘存储镜像和容器数据。