Docker修改缓存目录与修改镜像存储路径

怎样指定Docker存放image和容器的位置

背景

1
2
/               40G   (系统盘)
/data/disk      500G  (数据盘)

解决方案

 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
33
34
# 1. 停止服务(避免数据写入)
systemctl stop docker
systemctl stop containerd

# 2. 修改 Docker data-root(保证 JSON 不被破坏)
tmpfile=$(mktemp)

jq '.["data-root"] = "/data/disk/cache"' /etc/docker/daemon.json > "$tmpfile" \
  && mv "$tmpfile" /etc/docker/daemon.json

# 3. 创建目标目录
mkdir -p /data/disk/cache
mkdir -p /data/disk/containerd

# 4. 迁移 containerd 数据(避免 mv 跨设备问题)
rsync -aHAX /var/lib/containerd/ /data/disk/containerd/

# 5. 备份旧数据(不要直接删)
mv /var/lib/containerd /var/lib/containerd.bak

# 6. 生成 containerd 配置(仅在不存在时)
[ -f /etc/containerd/config.toml ] || \
  containerd config default > /etc/containerd/config.toml

# 7. 修改 root/state(精确匹配)
sed -i 's#^root = .*#root = "/data/disk/containerd"#' /etc/containerd/config.toml
sed -i 's#^state = .*#state = "/run/containerd"#' /etc/containerd/config.toml

# 8. 重新加载 systemd(通常可选,但建议)
systemctl daemon-reload

# 9. 启动服务(顺序很重要)
systemctl start containerd
systemctl start docker
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计