本地docker注册证书docker login连接到harbor仓库、利用shell脚本将大量镜像pull、tag、push到私有harbor仓库

1. 本地docker注册证书docker login连接到harbor仓库:

我们使用docker login/push/pull去与Harbor打交道,上传下载镜像等。 但是可能会出现x509: certificate signed by unknown authority之类的错误。

[root@test01 harbor.dev]# docker login harbor.dev
Authenticating with existing credentials…
Login did not succeed, error: Error response from daemon: Get https://harbor.dev/v2/: x509: certificate signed by unknown authority
Username (admin): admin
Password:
Error response from daemon: Get https://harbor.dev/v2/: x509: certificate signed by unknown authority

此时根据docker官方https://docs.docker.com/engine/security/certificates/,客户端要使用tls与Harbor通信,使用的还是自签证书,那么必须建立一个目录:/etc/docker/certs.d,在这个目录下建立签名的域名的目录, 那么整个目录为: /etc/docker/certs.d/xxxx(harbor域名), 然后把harbor的证书ca.crt等拷贝到这个目录即可。
在这里插入图片描述

2.使用shell脚本将大量镜像pull、tag、push到私有harbor仓库

#!/bin/bash

while IFS= read -r line; do
  image_name=$(echo "$line" | awk '{print $1}')

  new_name=$(echo "$line" | awk '{print $2}' | tr -d '\r')

  docker pull "$image_name"
  docker tag "$image_name" "$new_name"
  docker push "$new_name"

  echo "Pulled, tagged, and pushed $image_name as $new_name"
done < images.txt

如上所示,我们首先需要准备一个images.txt里面包括了所有下载镜像名及上传名,如下所示,每行包括image_name与new_name,其中用空格隔开

istio/proxyv2:1.14.1 harbor.dev/cube_studio/istio_proxyv2:1.14.1
istio/pilot:1.14.1 harbor.dev/cube_studio/pilot:1.14.1
mysql:5.7 harbor.dev/cube_studio/

当然,以上脚本的关键在于image_name与new_name的获取,若new_name可根据image_name修改得到,也可以更改脚本得到适合自己的new_name,以下可供参考。

  #images.txt每行只有image_name,tr -d '\r'去掉换行符
  image_name=$(echo "$line" | awk '{print $1}' | tr -d '\r')
  
  #在image_name前加上harbor.dev/hub/
  new_name="harbor.dev/hub/$image_name"
  
  #image_name中的ccr.ccs.tencentyun.com/hub替换为harbor.dev/hub
  new_name=$(echo "$image_name" | sed 's/ccr.ccs.tencentyun.com\/hub/harbor.dev\/hub/g')
  
将Excel表格中的数据粘贴到记事本中,且每列间距都为一个空格

可在EXECL中将你需要的所有数据先合并成一列再导出。

  • 假定你原数据有AB两列,在C1单元格输入公式:=A1&" "&B1,将公式用填充柄向下复制,之后将C列粘贴到txt文档即每列间距都为一个空格

猜你喜欢

转载自blog.csdn.net/qq_45808700/article/details/132852079