Docker Registry 登录错误修复

错误信息

Error response from daemon: Get "https://192.168.3.123:5000/v2/": http: server gave HTTP response to HTTPS client

问题原因

Docker 客户端默认尝试使用 HTTPS 连接 Registry,但 Registry 服务器返回的是 HTTP 响应。

解决方案

方案 1:配置 Docker 允许不安全的 Registry(推荐用于内网)

Linux 系统

编辑 /etc/docker/daemon.json

sudo vi /etc/docker/daemon.json

添加以下内容:

{
  "insecure-registries": ["192.168.3.123:15000"]
}

重启 Docker 服务:

sudo systemctl restart docker
macOS / Windows
  1. 打开 Docker Desktop
  2. 进入 Settings → Docker Engine
  3. 在 JSON 配置中添加:
{
  "insecure-registries": ["192.168.3.123:15000"]
}
  1. 点击 “Apply & Restart”

方案 2:使用 HTTP 协议登录

如果 Registry 使用 HTTP(非 HTTPS),可以在登录时指定协议:

# 使用 http:// 前缀
docker login http://192.168.3.123:15000 -u admin -p docker

# 或者使用 --password-stdin(更安全)
echo "docker" | docker login http://192.168.3.123:15000 -u admin --password-stdin

方案 3:配置 Registry 使用 HTTPS(生产环境推荐)

如果 Registry 应该使用 HTTPS,需要:

  1. 确保证书配置正确

    • 证书文件存在于 /data/docker/docker-registry/certs/
    • ca.crtca.key 文件有效
  2. 检查 docker-compose.yml 配置

    environment:
      - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt
      - REGISTRY_HTTP_TLS_KEY=/certs/ca.key
  3. 验证端口映射

    ports:
      - "15000:443"  # 确保端口映射正确
  4. 添加证书到 Docker 客户端信任列表

    # 复制证书到 Docker 证书目录
    sudo mkdir -p /etc/docker/certs.d/192.168.3.123:15000
    sudo cp /path/to/ca.crt /etc/docker/certs.d/192.168.3.123:15000/ca.crt
    
    # 重启 Docker
    sudo systemctl restart docker

快速修复命令

如果 Registry 使用 HTTP(内网环境)

# 1. 配置 Docker daemon
sudo tee -a /etc/docker/daemon.json <<EOF
{
  "insecure-registries": ["192.168.3.123:15000"]
}
EOF

# 2. 重启 Docker
sudo systemctl restart docker

# 3. 使用 HTTP 登录
docker login http://192.168.3.123:15000 -u admin -p docker

如果 Registry 使用 HTTPS

# 1. 添加证书到信任列表
sudo mkdir -p /etc/docker/certs.d/192.168.3.123:15000
sudo cp /data/docker/docker-registry/certs/ca.crt /etc/docker/certs.d/192.168.3.123:15000/ca.crt

# 2. 重启 Docker
sudo systemctl restart docker

# 3. 使用 HTTPS 登录
docker login 192.168.3.123:15000 -u admin -p docker

验证配置

# 检查 Docker daemon 配置
cat /etc/docker/daemon.json

# 测试连接
curl -k http://192.168.3.123:15000/v2/
# 或
curl -k https://192.168.3.123:15000/v2/

# 登录测试
docker login 192.168.3.123:15000 -u admin -p docker

安全建议

  1. 生产环境:使用 HTTPS + 有效证书
  2. 内网环境:可以使用 HTTP + insecure-registries
  3. 密码安全:使用 --password-stdin 而不是 -p 参数
# 安全方式登录
echo "your-password" | docker login 192.168.3.123:15000 -u admin --password-stdin
作者:Jeebiz  创建时间:2025-12-09 21:54
最后编辑:Jeebiz  更新时间:2025-12-10 15:39
上一篇:
下一篇: