标签搜索

目 录CONTENT

文章目录

解决Docker无法拉取镜像问题

沙漠渔
2024-06-12 14:27:17 / 0 评论 / 0 点赞 / 126 阅读 / 2,110 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-06-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前几天还好好的,这两天拉取docker镜像的时候发现一直无法拉取了,应该是进了GFW了,整理一下如何正常拉取镜像。

基本原理

Docker是一种容器实现方式,巴拉巴拉,这里不细说了,其采用的C/S架构,其中

  • 客户端:命令行工具,负责与服务器通信。
  • 服务端: docker服务( docker daemon),承担创建、运行和下载容器镜像服务

所以这里如果处理无法拉取镜像的问题,即需要配置服务端,让其能够正常拉取。

Docker守护程序在其启动环境中使用以下环境变量来配置HTTP或HTTPS代理行为:

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • NO_PROXY
  • no_proxy

处理方式

默认代理模式添加

创建一个systemd插件目录docker服务:

sudo mkdir -p /etc/systemd/system/docker.service.d

创建/etc/systemd/system/docker.service.d/http-proxy.conf文件,增加了HTTP_PROXY环境变量:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"

如果使用HTTPS代理服务器,配置HTTPS_PROXY环境变量:

[Service]
Environment="HTTPS_PROXY=https://proxy.example.com:3129"

或者按需配置多个环境变量:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Environment="HTTPS_PROXY=https://proxy.example.com:3129"

如果代理路径中需要使用特殊字符包括#?!()[]{}需要进行转义处理。
例如:

[Service]
Environment="HTTP_PROXY=http://domain%%5Cuser:complex%%[email protected]:3128/"

如果有不需要代理的地址,可以通过NO_PROXY环境变量说明。
NO_PROXY变量指定一个字符串,该字符串包含应从代理中排除的主机的逗号分隔值。您可以指定以下选项来排除主机:

  • IP地址前缀(1.2.3.4)
  • 域名或特殊的DNS标签(*)
  • 域名匹配该名称和所有子域。以“.”开头的域名仅匹配子域。例如,给定域foo.example.com和example.com:
    • example.com比赛example.com和foo.example.com,以及
    • .example.com仅匹配foo.example.com
  • 一个星号(*)表示不应进行任何代理
  • IP地址前缀(1.2.3.4:80)和域名(foo.example.com:80)
    例如:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Environment="HTTPS_PROXY=https://proxy.example.com:3129"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"

刷新配置并重启Docker

sudo systemctl daemon-reload
sudo systemctl restart docker

验证配置是否已加载

sudo systemctl show --property=Environment docker

Environment=HTTP_PROXY=http://proxy.example.com:3128 HTTPS_PROXY=https://proxy.example.com:3129 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp

在Docker引擎版本23.0和更高版本中,可以在daemon.json文件修改,修改方式如下:

{
  "proxies": {
    "http-proxy": "http://proxy.example.com",
    "https-proxy": "https://proxy.example.com",
    "no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
  }
}

这些配置会覆盖默认配置。

0
广告 广告

评论区