x509: certificate signed by unknown authority

从harbor拉去镜像报错

$ docker run --rm -it core.harbor1.domain/<image>:demon-latest bash
x509: certificate signed by unknown authority

从错误信息来看,Docker 在尝试从 core.harbor1.domain 拉取镜像时,遇到了 SSL 证书验证失败的问题。具体错误是:

x509: certificate signed by unknown authority

这意味着 Docker 无法验证 core.harbor1.domain 的 SSL 证书,可能是因为该证书是自签名的,或者 Docker 客户端不信任该证书的颁发机构。


解决方法

以下是几种常见的解决方法:


方法 1:信任自签名证书

如果 core.harbor1.domain 使用的是自签名证书,可以将该证书添加到 Docker 客户端的信任列表中。

  1. 获取证书

    • core.harbor1.domain 获取其 SSL 证书(通常是 .crt 文件)。

    • 如果你有权限访问服务器,可以使用以下命令导出证书:

      bash 复制代码
      openssl s_client -connect core.harbor1.domain:443 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > core.harbor1.domain.crt
  2. 将证书添加到 Docker 的信任列表

    • 将证书文件复制到 Docker 的证书目录中。具体路径取决于操作系统:
      • Linux : /etc/docker/certs.d/core.harbor1.domain/
      • Windows : C:\ProgramData\docker\certs.d\core.harbor1.domain\
      • macOS : ~/.docker/certs.d/core.harbor1.domain/
    • 将证书文件重命名为 ca.crt
  3. 重启 Docker 服务

    • 重启 Docker 以使更改生效:

      bash 复制代码
      sudo systemctl restart docker
  4. 重新运行命令

    • 再次尝试运行 docker run 命令。

方法 2:禁用 SSL 验证(不推荐)

如果无法获取证书或无法修改 Docker 配置,可以临时禁用 SSL 验证。注意:这种方法不安全,仅适用于测试环境。

  1. 修改 Docker 配置

    • 编辑 Docker 的配置文件(通常是 /etc/docker/daemon.json),添加以下内容:

      json 复制代码
      {
        "insecure-registries": ["core.harbor1.domain"]
      }
  2. 重启 Docker 服务

    • 重启 Docker 以使更改生效:

      bash 复制代码
      sudo systemctl restart docker
  3. 重新运行命令

    • 再次尝试运行 docker run 命令。

方法 3:手动拉取镜像

如果 Docker 仍然无法拉取镜像,可以尝试手动拉取镜像并重新打标签。

  1. 手动拉取镜像

    • 使用 docker pull 命令手动拉取镜像:

      bash 复制代码
      docker pull core.harbor1.domain/flink/soc-saas-flink:demon-latest
  2. 重新打标签

    • 如果拉取成功,可以重新打标签以避免 SSL 问题:

      bash 复制代码
      docker tag core.harbor1.domain/flink/soc-saas-flink:demon-latest flink-soc-saas-flink:demon-latest
  3. 运行容器

    • 使用新的标签运行容器:

      bash 复制代码
      docker run --rm -it flink-soc-saas-flink:demon-latest bin/sql-client.sh -Drest.address=10.50.108.7 -Drest.port=40403 -Dpipeline.operator-chaining.enabled=false -Dexecution.runtime-mode=batch

方法 4:使用 --insecure-registry 参数(旧版 Docker)

如果你使用的是旧版 Docker(1.13 或更早版本),可以通过启动 Docker 时添加 --insecure-registry 参数来禁用 SSL 验证。

  1. 编辑 Docker 服务文件

    • 编辑 Docker 的服务文件(通常是 /lib/systemd/system/docker.service),在 ExecStart 行中添加 --insecure-registry 参数:

      ini 复制代码
      ExecStart=/usr/bin/dockerd --insecure-registry core.harbor1.domain
  2. 重启 Docker 服务

    • 重启 Docker 以使更改生效:

      bash 复制代码
      sudo systemctl daemon-reload
      sudo systemctl restart docker
  3. 重新运行命令

    • 再次尝试运行 docker run 命令。

总结

  • 如果可能,优先使用 方法 1(信任自签名证书),这是最安全和推荐的方式。
  • 如果无法获取证书,可以尝试 方法 2(禁用 SSL 验证),但请注意安全风险。
  • 如果问题仍然存在,可以尝试 方法 3 (手动拉取镜像)或 方法 4(旧版 Docker 的解决方案)。
相关推荐
2401_8979300628 分钟前
linux系统如何配置host.docker.internal
linux·docker·eureka
亲持红叶5 小时前
open-webui安装
docker·open-webui
伪装成塔的小兵5 小时前
Windows使用docker部署fastgpt出现的一些问题
windows·docker·容器·oneapi·fastgpt
转身後 默落9 小时前
11.Docker 之分布式仓库 Harbor
分布式·docker·容器
菩提云9 小时前
Deepseek存算分离安全部署手册
人工智能·深度学习·安全·docker·容器
c无序16 小时前
Docker-技术架构演进之路
docker
努力的小T19 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
东风微鸣21 小时前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性
转身後 默落1 天前
04.Docker 镜像命令
docker·容器·eureka
IT_张三1 天前
Docker+Kubernetes_第一章_Docker入门
java·docker·kubernetes