最近国内 Docker 镜像拉取不太通畅,实验了几种镜像拉取的方式,写篇博客分享一下。
原以为只是 docker hub 被毙了,上机器一操作,官方的下载地点也被毙了,真是从源头办理标题==。
不外还好目前另有其他源能用,已经有大神把各种源整理成脚本,常用的 Linux 体系可以一个脚本办理。
如何修改镜像堆栈
在 Docker 中,可以修改daemon.json来修改镜像堆栈。
Linux
在 Linux 体系中,Docker 的设置文件通常位于 /etc/docker/daemon.json。
如果用的是无根用户模式 (rootless mode),设置文件则位于 ~/.config/docker/daemon.json。 固然也可以在启动 Docker 守护进程时,通过 --config-file 标记明白指定设置文件的位置。
如果你没有添加过设置,就需要在/etc/docker/创建文件daemon.json, 然后通过 registry-mirrors 来指定镜像堆栈。修改完成后,重启服务。示例如下:
- sudo mkdir -p /etc/docker
- sudo tee /etc/docker/daemon.json <<-'EOF'
- {
- "registry-mirrors": [
- "https://docker.m.daocloud.io"
- ]
- }
- EOF
- sudo systemctl daemon-reload
- sudo systemctl restart docker
复制代码 群晖
群晖的用户在容器堆栈的设置中就可以加了。
几种办理方案
从网盘下载/淘宝购买
不得不佩服国人的贸易嗅觉,镜像拉取不通畅后,淘宝上立马就出现了相关的服务。给人远程拉镜像 或 把镜像放到百度网盘等卖。。
这一类是非常不建议去利用的,一方面镜像可以很轻易的被修改,安全隐患大;另一方面确实没须要。
利用代理
如果自己会搭梯子,或者有买梯子的同学,就不用折腾了,直接利用全局代理或者给 Docker 服务设置代理即可。
下面是单独给 Docker 服务设置代理的方法。
Liunx
在Linux上,有多种方式给 Docker 设置代理,这里说常用的两种。
- 一种是直接找到 Docker service 的文件,直接在 [Service] 模块下加入代理设置,如:
- # 通过 systemctl status 可以看到 Service 文件目录
- $ sudo systemctl status docker
- ● docker.service - Docker Application Container Engine
- Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
- $ sduo vi /usr/lib/systemd/system/docker.service
- # 在 `[Service]` 模块加入配置即可
- [Service]
- Environment="HTTP_PROXY=http://192.168.10.1:7890" # 换成你的代理地址
- Environment="HTTPS_PROXY=http://192.168.10.1:7890" # 换成你的代理地址
- Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,fd00::/8,example.com" # 不需要走代理的地址。
复制代码
- 还可以通过systemd的 drop-in 文件来设置HTTP代理, 操作如下:
- # 创建 /etc/systemd/system/docker.service.d/http-proxy.conf 文件
- $ sudo mkdir -p /etc/systemd/system/docker.service.d/
- $ sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
- # 在其中加入下面的内容
- [Service]
- Environment="HTTP_PROXY=http://192.168.10.1:7890" # 换成你的代理地址
- Environment="HTTPS_PROXY=http://192.168.10.1:7890" # 换成你的代理地址
- Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,fd00::/8,example.com" # 不需要走代理的地址。
复制代码 设置好后,重启服务。
- $ sudo systemctl daemon-reload
- $ sudo systemctl restart docker
- # 通过这个命令查看是否配置成功
- $ sudo systemctl show --property=Environment docker
- Environment=HTTP_PROXY=http://192.168.10.1:7890 HTTPS_PROXY=http://192.168.10.1:7890 ....
复制代码 群晖
群晖体系就是基于Linux改的,找到服务的位置,和Linux一样的修改即可。
开启SSH,SSH登录后获取root权限,然后修改下面的文件以及在[Service]下面添加代理内容。添加完成后重启 docker/ContainerManager 服务。
- $ vi /usr/local/lib/systemd/system/pkg-Docker-dockerd.service
- [Service]
- Environment="HTTP_PROXY=http://192.168.10.1:7890" # 换成你的代理地址
- Environment="HTTPS_PROXY=http://192.168.10.1:7890" # 换成你的代理地址
- Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,fd00::/8,example.com" # 不需要走代理的地址。
复制代码
- $ vi /usr/local/lib/systemd/system/pkg-ContainerManager-dockerd.service
- [Service]
- Environment="HTTP_PROXY=http://192.168.10.1:7890" # 换成你的代理地址
- Environment="HTTPS_PROXY=http://192.168.10.1:7890" # 换成你的代理地址
- Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,fd00::/8,example.com" # 不需要走代理的地址。
复制代码 利用镜像服务
目前另有一些第三方提供的,目前还能利用(随时大概被 |