侧边栏壁纸
博主头像
liveJQ博主等级

沒有乐趣,何来开始

  • 累计撰写 163 篇文章
  • 累计创建 66 个标签
  • 累计收到 2 条评论

解决无法下载 Docker 镜像的问题

liveJQ
2024-06-15 / 0 评论 / 0 点赞 / 431 阅读 / 2,686 字

“众所周知”,最近 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

参考资料

  1. Docker daemon configuration overview
  2. 自建Docker 镜像/源加速的方法
0

评论区