最近国内 Docker 镜像拉取不太通畅,尝试了几种镜像拉取的方式,写篇博客分享一下。
原以为只是 docker hub 被毙了,上机器一操作,官方的下载地址也被毙了,真是从源头解决问题==。
不过还好目前还有其他源能用,已经有大神把各种源整理成脚本,常用的 Linux 系统可以一个脚本解决。
- 项目仓库 LinuxMirrors
- 使用方法
如何修改镜像仓库
在 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" # 不需