要更改Linux系统中Docker容器文件的存储位置,需要调整Docker守护进程(dockerd
)的配置,使其使用新的存储位置。以下是一种通用的方法,适用于大多数Linux发行版,尤其是那些使用Systemd作为初始化系统的版本:
步骤1: 选择一个新的存储位置
首先,确定您希望Docker容器文件存储的新位置,例如 /mnt/data/docker
。确保该目录存在且有足够的磁盘空间。
步骤2: 停止Docker服务
在更改配置前,确保Docker服务已经停止:
Bash
sudo systemctl stop docker
步骤3: 迁移现有数据(可选)
如果您已经有运行中的容器或已下载的镜像,您可能希望将这些数据迁移到新位置。这通常涉及将 /var/lib/docker
目录下的内容复制到新位置:
Bash
sudo rsync -aP /var/lib/docker/ /mnt/data/docker/
步骤4: 更新Docker配置
创建或编辑Docker的配置文件 /etc/docker/daemon.json
(如果文件不存在,请创建它)。添加或修改如下内容:
Json
{
"data-root": "/mnt/data/docker"
}
这里 "data-root"
键指定了新的容器文件存储位置。保存并关闭文件。
>>>
编辑docker配置文件:
sudo vim /etc/systemd/system/multi-user.target.wants/docker.service
# 将ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock修改以下内容:
ExecStart=/usr/bin/dockerd --data-root=/mnt/docker --storage-driver=overlay
步骤5: 重新加载并启动Docker服务
应用配置更改并启动Docker服务:
Bash
sudo systemctl daemon-reload
sudo systemctl start docker
出现如下启动报错的解决方案:
出现docker启动报错:Job for docker.service failed because the control process exited with error code,查看 systemctl status docker。service发现systemctl start docker报错(code=exited, status=1/FAILURE)的解决方案:
本次启动不起来与docker服务无关
具体解决问题是修改 /etc/docker/daemon.json,vim /etc/docker/daemon.json
# 添加如下内容
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
docker服务启动不起来,需要添加存储驱动
“storage-driver”: “overlay2”,
“storage-opts”: [“overlay2.override_kernel_check=true”]
步骤6: 验证更改
确认Docker服务已成功启动,并且新的存储位置正在被使用:
Bash
sudo systemctl status docker
docker info | grep 'Root Dir'
docker info
命令的输出应显示新的 Root Dir
为 /mnt/data/docker
。
至此,您已经成功更改了Linux系统中Docker容器文件的存储位置。新创建的容器和镜像将会存储在这个新的位置,而不再使用旧的 /var/lib/docker
。如果您之前迁移了已有数据,那么这些数据也应能正常在新位置被Docker识别和使用。