docker配置镜像时Registry Mirrors未生效,以及Rootful/Rootless Docker冲突
docker info | grep "Registry Mirrors"没有显示镜像加速器。同时,在系统中同时存在Rootful Docker(以root权限运行的标准Docker)和Rootless Docker(以非root用户运行的Docker,通过dockerd-rootless-setuptool.sh安装)。
运行ps aux | grep dockerd | grep -v grep会发现有多个dockerd进程,其中一个以root身份运行,另一个以非root用户通过rootlesskit运行。docker CLI默认会优先连接用户Home目录下的Rootless Docker配置。
还有其他rootlesskit相关的进程
以及在文件夹下~/.docker/config.json显示"currentContext": “rootless”。
- 错误原因分析:
尽管我们想配置Rootful Docker(它读取/etc/docker/daemon.json),但Docker CLI由于~/.docker/config.json的配置和DOCKER_HOST环境变量的存在,一直在尝试连接到Rootless Docker。Rootless Docker的配置在~/.config/docker/daemon.json,而不是/etc/docker/daemon.json。
- 解决方法:
我们需要明确使用Rootful Docker(这也是我们一开始安装daemon.json的目的),并确保docker CLI连接到它。
清除DOCKER_HOST环境变量:
在当前终端中执行unset DOCKER_HOST。更重要的是,检查你的shell配置文件(如/.bashrc、/.zshrc或~/.profile),找到并删除或注释掉类似export DOCKER_HOST="…"的行。
移除或重命名Rootless Docker的CLI配置:
rm -rf ~/.docker # 或者 mv ~/.docker ~/.docker.backup
这将强制docker CLI恢复默认行为,连接到/var/run/docker.sock。
重启Docker服务(Rootful):
sudo systemctl stop docker.socket # 确保socket也停止
sudo systemctl stop docker.service
sudo systemctl daemon-reload
sudo systemctl start docker.service
在新的终端中验证镜像加速器:
打开一个全新的终端窗口,运行:
docker info | grep "Registry Mirrors" -A 1
这时,Registry Mirrors应该能正确显示了!这证明CLI现在连接的是Rootful Docker,并且配置已生效。
修改docker镜像源的教程:https://cloud.tencent.com/developer/article/2516747?policyId=1003
此教程配置的镜像源可用
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)