docker 配置镜像源不生效

79 阅读1分钟

症状

更改 /etc/docker/daemon.json ,配置的镜像源无法生效。机器重启后,配置的镜像源、已经拉取的镜像全部消失。

Versions

Docker version 28.2.2, build 28.2.2-0ubuntu1~24.04.1

原因

省流: docker 没成功 reload,甚至没成功启动,直接 systemctl restart docker 是不管用的。可以使用下面的指令重新启动 docker。

# stop docker.socket 时,docker 本身会自动 stop,重新 start 即可。
systemctl stop docker.socket
systemctl start docker

此时执行 docker info ,应该就能看到我们配置的 /etc/docker/daemon.json 已经生效了。

分析

没错,罪魁祸首又是 Snap. F**k you Snap!

我们 list 一下所有有关 docker 的 service, 可以看到一个 snap 相关的 snap.docker.dockerd.service

root@lskvm1:~# systemctl list-units | grep docker
  sys-devices-virtual-net-docker0.device                                                    loaded active plugged   /sys/devices/virtual/net/docker0
  sys-subsystem-net-devices-docker0.device                                                  loaded active plugged   /sys/subsystem/net/devices/docker0
  run-snapd-ns-docker.mnt.mount                                                             loaded active mounted   /run/snapd/ns/docker.mnt
  snap-docker-3377.mount                                                                    loaded active mounted   Mount unit for docker, revision 3377
  docker.service                                                                            loaded active running   Docker Application Container Engine
  snap.docker.dockerd.service                                                               loaded active running   Service for snap application docker.dockerd
  docker.socket                                                                             loaded active running   Docker Socket for the API

禁用掉就一切都好了。

systemctl disable snap.docker.dockerd