前言

解决无法拉取 docker 镜像的问题

参考资料

使用别人搭建的镜像源

1.在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

1
2
3
{
"registry-mirrors": ["https://docker.1panel.live", "https://hub.rat.dev/", "https://docker.chenby.cn", "https://docker.m.daocloud.io", "https://cr.laoyou.ip-ddns.com"]
}

2.重启守护进程

1
systemctl daemon-reload

3.重启Docker

1
2
3
sudo systemctl restart docker
或者
service docker restart

缺点:不稳定

也可以使用下面的:

https://docker.melikeme.cn/

Docker 镜像加速服务

自己搭建镜像源

方法一:

参考项目:Docker-Proxy

部署在render上的教程

如果长时间不用的话服务可能会停止,重启下服务即可。

重启服务

方法二:

搭建在cloudflare

2024自建Docker镜像代理加速 教程来了 3分钟部署完毕

方法三:在自己的vps上使用nginx反代docker

方法来源:https://linux.do/t/topic/320048

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 使用 map 来匹配和替换 upstream 头部中的 auth.docker.io
map $upstream_http_www_authenticate $m_www_authenticate_replaced {
"~auth\.docker\.io(.*)" "$1";
default "";
}

map $m_www_authenticate_replaced $m_final_replaced {
"~(.*)" 'Bearer realm=\"$scheme://$host$1';
default "";
}

server
{

proxy_ssl_server_name on;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 修改授权地址
proxy_hide_header www-authenticate;
add_header www-authenticate "$m_final_replaced" always;

# 关闭缓存
proxy_buffering off;
# 转发认证相关
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;

# 对 upstream 状态码检查,实现 error_page 错误重定向
proxy_intercept_errors on;
recursive_error_pages on;

# 根据状态码执行对应操作,以下为301、302、307状态码都会触发
error_page 301 302 307 = @handle_redirect;

location ~* ^/(v2|v1|v1.29)/ {
proxy_pass https://registry-1.docker.io;
proxy_set_header Host registry-1.docker.io;
proxy_read_timeout 18000s;
proxy_send_timeout 18000s;
send_timeout 18000s;
proxy_connect_timeout 18000s;
}
#处理重定向
location @handle_redirect {
resolver 1.1.1.1;
set $saved_redirect_location '$upstream_http_location';
proxy_pass $saved_redirect_location;
}

#代理授权地址
location ^~ /token {
proxy_pass https://auth.docker.io;
proxy_set_header Host auth.docker.io;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}

}

镜像加速器

Docker 镜像加速器,无法拉取 DockerHub 镜像?dkTurbo 来帮你!傻瓜式的应用可以帮你自动换源,从而使用更快的镜像加速下载。

项目地址:https://hub.docker.com/r/cp0204/dkturbo

一键运行:

1
2
3
4
5
6
7
8
9
10
docker run --rm \
--name=dkturbo \
-v /etc/docker:/etc/docker \
-v /opt:/opt \
-e MODE=registry \
-e REGISTRY=auto \
--network=bridge \
--pid=host \
--privileged \
registry.cn-shenzhen.aliyuncs.com/cp0204/dkturbo:main

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
name: dkturbo
services:
dkturbo:
image: registry.cn-shenzhen.aliyuncs.com/cp0204/dkturbo:main
container_name: dkturbo
volumes:
- /etc/docker:/etc/docker
- /opt:/opt
environment:
- MODE=registry
- REGISTRY=auto
network_mode: bridge
restart: unless-stopped
pid: host
privileged: true

启动 = 自动换源

自动测速和修改镜像源,你可以在容器日志里看工作进度。

容器停止 = 换源成功

换源后自动停止自身,并重启系统 Docker 服务,此时容器可以删除。

参考资料

佬友公益docker镜像源+1