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 的解决方案)。
相关推荐
三雷科技4 小时前
docker代理设置
运维·docker·容器
行者张良5 小时前
解决:离线部署Docker容器(使用Docker现有容器生成镜像,将镜像打包成tar并发布到离线服务器中)
服务器·docker·容器
ihengshuai5 小时前
使用DockerCompose部署服务
docker·云原生·容器
半卷书生5 小时前
将node节点加入k8s集群
linux·docker·kubernetes
ihengshuai5 小时前
搭建k8s集群
docker·云原生·容器·kubernetes·devops·持续部署
淡黄的Cherry6 小时前
OOM排查思路
linux·docker·kubernetes
916字节8 小时前
docker学习笔记-初步接触
笔记·学习·docker
namelijink17 小时前
docker-compose部署下Fastapi中使用sqlalchemy和Alembic
adb·docker·fastapi
水彩橘子18 小时前
docker+ffmpeg+nginx+rtmp 拉取摄像机视频
nginx·docker·ffmpeg