一文搞定docker pull的时候报错docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“
问题:
在ubuntu系统内,执行docker拉取命令的时候会有报错
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 162.125.32.13:443: connect: connection refused.
原因分析:
多半是网络原因,在某些网络环境中,比如公司网络或需要通过代理服务器访问互联网的场景下,Docker 无法正常访问外部资源(如拉取镜像、访问外部网站等)。具体分为以下几个可能
- DNS解析的问题
- 没有合适的img源
- 代理设置问题
解决方案:
1. DNS解析的问题
- 打开 /etc/resolv.conf 文件进行编辑(需要 root 权限):
sudo nano /etc/resolv.conf
- 需要将公共 DNS 服务器(如 Google 的 DNS)添加到 /etc/resolv.conf 文件中:
nameserver 8.8.8.8 # Google 主 DNS
nameserver 8.8.4.4 # Google 备用 DNS
nameserver 127.0.0.53 # 保留原有的本地解析服务
- 重载 systemd 服务并重启 Docker: 添加配置后,执行以下命令使更改生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
2. 没有合适的img源
可以借鉴一下更换img源的指南
如何更换img源
如何更换img源
3. 代理问题
提示:首先需要有一个可以用的代理环境,已经在ubuntu系统里面正常运行,这里的proxy.example.com:xxx就是系统设置里面的代理地址
为 HTTP 代理创建配置文件:
在路径 /etc/systemd/system/docker.service.d/ 下(如果没有这个文件夹,那就创建一个),创建一个名为 http-proxy.conf 的文件
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
并添加以下内容:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:xxx/"
为 HTTPS 代理创建配置文件:
同样,在 /etc/systemd/system/docker.service.d/ 下创建一个名为 https-proxy.conf 的文件,并添加以下内容:
[Service]
Environment="HTTPS_PROXY=https://proxy.example.com:xxx/"
重载 systemd 服务并重启 Docker: 添加配置后,执行以下命令使更改生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
通过以下命令检查 Docker 服务是否正确加载了代理配置:
systemctl show docker | grep Environment
如果输出包含 HTTP_PROXY 和 HTTPS_PROXY 环境变量的值,说明配置已成功应用。
关于/etc/systemd/system/docker.service.d/ 文件夹
/etc/systemd/system/docker.service.d/ 是一个目录,用于为 Docker 服务定义或覆盖特定的 systemd 配置选项。这个目录的存在是为了通过 “drop-in” 文件对现有的 docker.service 配置进行自定义,而无需直接修改原始的 docker.service 文件。在 systemd 中,服务的主配置文件(例如 /usr/lib/systemd/system/docker.service)不建议直接修改。
优点
- 不影响主配置文件的更新:主服务文件更新时不会覆盖自定义配置。
- 更灵活的配置管理:可以轻松启用、禁用或调整服务的额外配置。
什么是"drop-in" 文件
“Drop-in” 文件是 systemd 提供的一种灵活机制,用于在不修改系统默认单元文件的情况下,自定义服务的行为。它非常适合在生产环境中对服务进行调整,且易于管理和还原。通过它,可以实现更加模块化和非侵入式的服务配置管理。