一、前言
关于Ubuntu更换docker镜像源,网上有很多的教程,但在实操中发现,更换的源无法生效——原因是我的docker是在系统安装时,选择附加安装的package的方式安装的。
现将处理过程记录如下。
二、获取镜像源
在网上随便找个几个镜像源几个,这是我找到的最新可用的几个(2025年3月16日可用):
"https://docker.1ms.run"
"https://docker.xuanyuan.me"
"https://mirror.ccs.tencentyun.com"
三、在daemon.json中添加镜像源
3.1 找到daemon.json的位置
网上很多教程是在/etc/
目录下新建docker
目录和daemon.json
文件,并在其中添加并重启应用,但经过我实操,并没有生效。
这里我列举两种可行的方式:
3.1.1 根据docker进程中的加载配置目录定位
ps -ef | grep docker
这条命令会找到正在运行的docker进程,如下图所示。
根据其中的--config-file
参数,拿到对应的daemon.json所在路径。
3.1.2 全局搜索该文件
sudo find / -name "daemon.json"
根据网上的各教程,我们可以初步断定,无论这个配置文件在哪个路径,它的文件名大概率都会叫做"daemon.json",因此我们可以用该文件名进行全局搜索。如下图所示。
注意:
系统配置相关目录,有部分使用普通用户无权限访问,因此建议使用sudo权限运行find命令。
为什么会有两个daemon.json文件。根据我的检查,它们确实是两个文件,而非软连接或硬链接,而其中的/var/snap/docker/3064/config/daemon.json
是docker在启动是加载的配置,/snap/docker/3064/config/daemon.json
则是在docker启动后,从/var/snap/docker/3064/config/daemon.json
加载过来的。
如果你不确定是哪个路径,可以将两个文件都进行修改。
3.2 将配置新增到daemon.json中
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://mirror.ccs.tencentyun.com"
]
}
建议对原配置文件进行备份,然后将文件置空,再将上方内容插入后保存退出。
3.3 重启docker服务
sudo systemctl restart docker.service
注:如果没报错,那么可能你已经成功了。但如果你报错了,如下图所示:
那么就还得确定你的docker服务的名称,它可能不叫做docker。
3.3.1 确定docker服务名
cd /etc
sudo grep -rl docker . | grep "service$"
如下图所示
注:
有两个名称包含“docker”的服务。我们可以对service的配置细节进行查看,这里不做展开,仅将它们的区别简述如下:
服务名称 | 职责 | 依赖关系 |
---|---|---|
snap.docker.dockerd.service |
容器生命周期管理 | 依赖snap.docker.nvidia-container-toolkit.service |
snap.docker.nvidia-container-toolkit.service |
GPU资源分配与容器集成 | 独立运行 |
也就是说snap.docker.nvidia-container-toolkit.service
负责GPU加速,而snap.docker.dockerd.service
才是我们要找的docker服务。
3.3.2 根据找到的服务名重启docker服务
sudo systemctl restart snap.docker.dockerd.service
应该该命令,重启docker
3.3.3 重启报错处理方法
sudo systemctl status snap.docker.dockerd.service
查看运行状态和日志等信息,做进一步定位。
四、验证配置是否成功
sudo docker pull mysql
如果你的配置没问题,那么运行这条命令后,将开始拉取mysql镜像,如下图所示:
注意:不要使用docker search mysql
命令代替docker pull mysql
进行测试。因为镜像站仅缓存了常用的镜像以供下载,但无法代理搜索请求到Docker Hub,所以docker search
命令在更换镜像源后一般也无法正常使用。
原创,转发请注明。