症状
更改 /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