目录

1 场景解释

2 配置推送docker

3 推送

3.1 准备

3.2 标记镜像

3.3 登录docker(可省)

3.4 推送镜像

3.5 查看

4 参考 

5 你们可能遇到的问题

5.1 server gave HTTP response to HTTPS client 

5.1.1 可能原因1

5.1.2 可能原因2

5.1.3 解决方案


上一篇已经分享了,如何部署一个harbor服务,以及harbor平台的介绍。

这一篇介绍如何给harbor仓库推送镜像。

1 场景解释

推送往往场景是:Harbor搭建在A机器(centos系统),docker安装在B机器(centos系统),现在在B机器打包然后推送到A机器。

但是呢,本次案例里头,我是在harbor机器上演示了docker推送给harbor,跟上面场景没区别,只是上面场景是不同机器推送,我这边是同一台机器推送,但是操作流程都是一样的。

2 配置推送docker

假如b机器上要将镜像推送到a机器上,那么b机器上的docker需要配置镜像源,该镜像源指向a机器。

将配置文件:/etc/docker/daemon.json

配置成:

{
  "registry-mirrors": ["https://k1ktap5m.mirror.aliyuncs.com"],
  "insecure-registries": ["http://192.168.211.5:80"]
}
  1. registry-mirrors配置的是加速镜像源,
  2. insecure-registries配置就是a机器的镜像源地址,注意,不可省略http和80端口(这个端口就是harbor.yml上配置的http端口),不然就会推送失败

3 推送

3.1 准备

先拉取一个镜像下来做试验用:

docker pull nginx

3.2 标记镜像

给待推送的镜像打标记,打标记命令格式如下:

docker tag SOURCE_IMAGE[:TAG] 192.168.211.5:80/library/REPOSITORY[:TAG]

稍微解释下:

  1. SOURCE_IMAGE[:TAG]表示当前docker已存在的某个版本的镜像
  2. library表示的是harbor里头的某个项目名称,表示镜像推送给这个项目
  3. 注意,其中ip和端口都不要省(尤其在http协议里头)

比如我要推送nginx到harbor仓库,打的标记如下:

docker tag nginx:latest 192.168.211.5:80/library/nginx:latest

3.3 登录docker(可省)

执行以下命令

docker login 192.168.211.5:80

登出docker的命令:

docker logout

登录日志如下:

[root@localhost harbor]# docker login 192.168.211.5:80
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

3.4 推送镜像

给我的harbor推送镜像的命令格式如下:

docker push 192.168.211.5:80/library/REPOSITORY[:TAG]

看命令就知道,docker push后面的其实就是打标记的时候标记。

比如我要推送上面已经打好标记的镜像,命令如下:

docker push 192.168.211.5:80/library/nginx:latest

日志如下:

[root@localhost harbor]# docker tag nginx:latest 192.168.211.5:80/library/nginx:latest
[root@localhost harbor]# docker push 192.168.211.5:80/library/nginx:latest
The push refers to repository [192.168.211.5:80/library/nginx]
fac15b2caa0c: Pushed 
f8bf5746ac5a: Pushed 
d11eedadbd34: Pushed 
797e583d8c50: Pushed 
bf9ce92e8516: Pushed 
d000633a5681: Pushed 
latest: digest: sha256:6fe11397c34b973f3c957f0da22b09b7f11a4802e1db47aef54c29e2813cc125 size: 1570

3.5 查看

镜像推送成功之后,在harbor上对应的项目里头就可以查看到推送上来的镜像如下:

docker ffmpeg推流 docker 推送harbor_推送镜像

点击镜像,进入到镜像详情页面

4 参考 

我安装过程参考了一些材料,同时如果你们想要部署https的推送通道的话,也可以从下面的几篇文章做点参考


5 你们可能遇到的问题

5.1 server gave HTTP response to HTTPS client 

问题如题。

该问题出现的可能原因有多个,我这边试过两种情况会出现这个问题,这两种情况都是在daemon.json的配置项insecure-registries上

5.1.1 可能原因1

/etc/docker/daemon.json中的insecure-registries配置如下:

 "insecure-registries": ["192.168.211.5:80"]

上面这样配置出错原因是,默认如果不加协议,docker默认通过https的方式请求harbor

5.1.2 可能原因2

镜像打tag的时候格式不对

错误示范:

docker tag nginx:latest 192.168.211.5/library/nginx:latest

错误原因:如果只指定了ip,那么默认会通过https去访问harbor的443端口

正确写法:

docker tag nginx:latest 192.168.211.5:80/library/nginx:latest

上面这种写法,告诉docker访问80端口,80是http的默认端口

5.1.3 解决方案