一、 写作背景
近期折腾 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 编码格式)到该文件,有些问题是该文件记录的信息不正确造成的。尝试删除该文件,或与其它正常文件对比删除相关配置。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 long@longger.xin