Docker 迁移
迁移目录
主要是为了不让Docker镜像,容器占用系统盘的容量!
如果就一块盘或者系统盘容量大,这部分内容可忽略!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| docker pull nginx docker run -d -p 8080:80 nginx
systemctl stop docker
mkdir -p /data/docker/
rsync -avz /var/lib/docker/ /data/docker
vim /etc/docker/daemon.json
{ "data-root": "/data/docker" }
systemctl start docker
docker info | grep "Docker Root Dir"
|
挂载
完整步骤如下:
- 停止Docker服务
1
| sudo systemctl stop docker
|
- 备份原Docker数据
1 2
| sudo mkdir -p /var/lib/docker.backup sudo cp -R /var/lib/docker/* /var/lib/docker.backup/
|
- 确保目标目录存在
1
| sudo mkdir -p /data1/docker
|
- 将原Docker数据完整拷贝到新目录
1
| sudo rsync -avx /var/lib/docker/ /data1/docker/
|
- 修改
/etc/rc.local
文件
添加以下内容:
1 2 3
| #!/bin/bash mount --bind /data1/docker /var/lib/docker exit 0
|
- 确保
/etc/rc.local
有执行权限
1
| sudo chmod +x /etc/rc.local
|
- 创建 systemd 服务文件(如果不存在)
1
| sudo vim /etc/systemd/system/rc-local.service
|
内容如下:
1 2 3 4 5 6 7 8 9 10 11 12
| [Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local After=network.target
[Service] Type=oneshot ExecStart=/etc/rc.local RemainAfterExit=yes
[Install] WantedBy=multi-user.target
|
- 启用并启动 rc-local 服务
1 2 3
| sudo systemctl daemon-reload sudo systemctl enable rc-local sudo systemctl start rc-local
|
- 启动Docker服务
1
| sudo systemctl start docker
|
- 验证
1 2 3 4 5 6 7 8 9
| mount | grep docker
docker info | grep "Docker Root Dir"
docker ps docker images
|
- 可选:清理备份
1 2
| sudo rm -rf /var/lib/docker.backup
|
注意事项:
- 先在测试环境验证
- 确保有完整的数据备份
- 检查所有容器和服务是否正常
关于/etc/rc.local说明
/etc/rc.local
是一个传统的系统启动脚本,在系统启动的最后阶段运行。
主要特点:
- 系统启动后最后执行的脚本
- 可以添加自定义的启动时需要执行的命令
- 在早期Linux系统中常用于开机启动自定义脚本
- 现代systemd系统中已经逐渐被 systemd 服务替代
使用方法:
1 2 3 4 5
| ls /etc/rc.local
cat /etc/rc.local
|
在现代 systemd 的系统中(如CentOS 7+),如果要添加开机启动项,更推荐的方式是:
- 创建systemd service文件
- 使用
systemctl enable
命令
在排查Docker存储位置的特殊配置时,/etc/rc.local
可能包含一些自定义的挂载或配置命令。