一、 写作背景

近期折腾 Docker、K8S,在 K8S 集群上搭建了 Harbor 等应用,在使用过程中发现一些问题记录一下。

此次问题是向私库传输镜像后,在 dockerfile 中使用该镜像系统报认证错误。

二、问题描述

在 Dockerfile 内使用自建 Harbor 中的私有镜像,docker build 时,部分运行 Docker 的服务器上出现认证失败的问题,而在同一台服务器上使用 docker pull/push 等命令拉取该镜像均无此问题。

三、解决过程

3.1 登录使用 docker login harbor.k8s.sxkj.uat (自建的 Harbor 仓库)登录一下,登录成功后,执行 docker build 报错依然一样,执行 docker push/pull 成功

3.2 更新证书认证

3.2.1、域名证书配置

此操作可解决 Chrome 等浏览器因证书不能访问网站的问题。

将 harbor 的 CA 证书放到 /etc/docker/certs.d/harbor.k8s.sxkj.uat/ (最后一级目录,可以是 IP:Port,出可以是 域名:端口号,或域名,但是是必须是能够通过 web 访问到的 harbor 地址)

或者放置到 ~/docker/certs.d/harbor.k8s.sxkj.uat/ 目录下。

以上操作未能解决dockerfile build 的拉取问题

3.2.2、CA 证书配置

此操作可解决命令行下 docker push/pull 等命令下的证书认证问题。

1、将 CA 证书放置到 /etc/pki/ca-trust/source/anchors/ 目录下

2、 执行 update-ca-trust 升级 CA证书

以上操作未能解决dockerfile build 的拉取问题

3.3 更新Docker配置文件

经查看各系统中 ~/docker/daemon.json 配置文件均一至,无需修改。

在不能正常使用的服务器中发现 ~/docker/config.json 文件与其它正常服务器配置有所区别,故按正常服务器的配置修改不正常服务器,最终成功

至此问题已经解决。

四、分析

~/.docker/config.json 文件是在使用 docker login 命令时生成的,在命令执行成功后,会自动保存相应Docker registry 地址和 账号密码(采用 base64 编码格式)到该文件,有些问题是该文件记录的信息不正确造成的。尝试删除该文件,或与其它正常文件对比删除相关配置。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐