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 的解决方案)。
相关推荐
七夜zippoe1 小时前
压缩与缓存调优实战指南:从0到1根治性能瓶颈(四)
运维·docker·容器
java_logo3 小时前
Docker 部署 MinerU 教程:打造你的本地 PDF 智能处理中心
linux·运维·人工智能·docker·ai·容器·aigc
LCG元3 小时前
Docker容器化实战:将你的SpringBoot应用一键打包部署(三)-配置告警和自动扩缩容
后端·docker
技术杠精4 小时前
Docker Swarm之Java 应用部署与平滑更新
java·docker·容器
三口吃掉你14 小时前
Docker安装Elasticsearch、kibana、IK分词器
elasticsearch·docker·kibana·ik分词器
fly五行15 小时前
Windows 系统下使用 Docker 安装 Milvus 向量数据库
windows·docker·milvus
爱宇阳15 小时前
离线环境下运行 Docker 容器编排指南
docker·容器·eureka
Java陈序员16 小时前
免费开源!一款操作 MySQL 和 MariaDB 的 Web 界面工具!
mysql·docker·php·mariadb
梁正雄16 小时前
9、dockerfile
docker·dockerfile·dockerfile基础用法
panplan.top17 小时前
Tornado + Motor 微服务架构(Docker + 测试 + Kubernetes)
linux·python·docker·微服务·k8s·tornado