“众所周知”,最近 Docker 镜像拉取有点问题,镜像加速很多都“离奇失踪”了,故在此记录下自己比较常用的解决方法吧。
配置镜像加速
直接使用 Docker 守护程序默认的配置文件配置镜像加速地址,然后就可以正常使用与官方一样的命令,相当于一种无感知的代理服务。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.1panel.dev",
"https://dockerproxy.net",
"https://docker.m.daocloud.io",
"https://mirror.gcr.io",
"https://huecker.io",
"https://dockerhub.timeweb.cloud"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
在不久之前,这样配置好就完事了。但目前添加的加速地址,只适用于非中国大陆的网络。如果您的服务器满足以上要求但仍然无法正常使用(已确定加速地址百分百可用),请确保您使用的是非中国大陆提供的DNS解析服务。
配置代理
既然是网络问题,那就直接配置好代理服务,将本机对 Docker 的请求都转发给代理服务,只要代理服务那边能访问就可以了。
这边使用的 HTTP 代理,如果你在本地局域网的环境,你也可以直接在本地正常访问的系统里面起一个服务端。
通过配置环境变量
如果你通过命令直接运行容器,直接在后面加上:
-e HTTP_PROXY=http://livejq.top:1081 -e ALL_PROXY=http://livejq.top:1081 -e NO_PROXY=172.17.0.0/24,127.0.0.1,localhost
配置全局代理
你也可以直接配置 Linux 全局 HTTP 代理:
临时设置
export http_proxy=http://livejq.top:1081
export https_proxy=http://livejq.top:1081
永久设置
通过将以下配置写入到当前用户环境配置文件~/.profile
,或者通过echo $SHELL
,确定是否可以将配置写入~/.bashrc
或~/.zshrc
之类的文件。
proxy () {
export http_proxy="http://livejq.top:1081"
export https_proxy="http://livejq.top:1081"
echo "HTTP Proxy on"
}
noproxy () {
unset http_proxy
unset https_proxy
echo "HTTP Proxy off"
}
重新加载环境使生效
source ~/.profile
测试代理是否生效,查看结果IP是否变为代理IP。
proxy && curl ip.sb || curl ip-api.com
noproxy && curl ip.sb || curl ip-api.com
通过 daemon.json 文件
当 Docker Engine 为 23.0 及更高版本,可以直接使用/etc/docker/daemon.json
配置代理。
{
"registry-mirrors": [
"https://docker.1panel.dev",
"https://dockerproxy.net",
"https://docker.m.daocloud.io",
"https://mirror.gcr.io",
"https://huecker.io",
"https://dockerhub.timeweb.cloud"
],
"proxies": {
"http-proxy": "http://livejq.top:1081",
"https-proxy": "http://livejq.top:1081",
"no-proxy": "127.0.0.1,localhost,*.example.com"
}
}
配置完同样重启服务生效
sudo systemctl daemon-reload
sudo systemctl restart docker
通过 systemd 配置文件
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo cat <<EOF>/etc/systemd/system/docker.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://livejq.top:1081"
Environment="HTTPS_PROXY=http://livejq.top:1081"
Environment="NO_PROXY=127.0.0.1,localhost,*.example.com"
EOF
配置完同样重启服务生效
sudo systemctl daemon-reload
sudo systemctl restart docker
验证环境变量
sudo systemctl show --property=Environment docker
手动下载镜像并导入
找到一台能正常访问镜像的服务器,手动拉取镜像后再导入到目标机器。
拉取镜像
docker pull grafana/grafana:latest
打包单个/多个镜像到文件
docker save -o grafana_latest.tar grafana/grafana:latest
上传到目标机器后,加载打包文件里面的镜像到本地 docker 环境。
docker load -i grafana_latest.tar
评论区