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 的解决方案)。
相关推荐
计算机小手几秒前
Kong + Konga 网关入门实践:Docker 部署、反向代理与插件使用指南
运维·经验分享·网络协议·docker·kong·开源软件
特级业务专家37 分钟前
这下发布不需要Jenkins了
linux·git·docker
回忆是昨天里的海41 分钟前
docker自定义网络-简单总结
运维·docker·容器
.生产的驴1 小时前
DockerCompoe 部署注册中心Nacos 一键部署 单机+Mysql8
java·linux·运维·spring boot·缓存·docker·doc
tzhou644522 小时前
Docker 部署 Nginx HTTPS 服务(CentOS 7)
nginx·docker·https
iconball2 小时前
个人用云计算学习笔记 --32 Docker和docker swarm
运维·笔记·学习·docker·容器·云计算
摇滚侠2 小时前
镜像容器相关命令,docker export/import/save/load/commit,导出容器给别人使用
运维·docker·容器
回忆是昨天里的海3 小时前
docker Compose-安装wordpress
运维·docker·容器
key2world3 小时前
Dockerfile 制作镜像和推送
docker·dockerfile·docker push
我可以将你更新哟3 小时前
【linux】配置 Docker 国内镜像源, centos7安装docker-ce,docker相关命令,永久配置 DNS
linux·运维·docker