在本地搭建了个harbor仓库,另一个就是普通的docker机器。安装docker-compose就各种问题不断出现,大家可以看https://blog.youkuaiyun.com/u012149637/article/details/112968173,现在docker login,docker push也有问题,妈的。气死老子
首先说一下,harbor机器和docker机器都要关闭selinux
getenforce
setenforce 0
vim /etc/selinux/config
将SELINUX
=
disabled
关于sudo vim /usr/lib/systemd/system/docker.service
默认的是--containerd,启动根本没读/etc/docker/daemon.json,如果不改这个,你再怎么配置daemon.json都不管用
查阅了官方文档才知道,https://docs.docker.com/engine/reference/commandline/dockerd/,网上其它博文都是直接让你往fd://后面加daemon.json的内容,比如fd:// --insecure-registries=ip,根本不说为什么,如果太多参数怎么办。都是这个复制那个,那个复制这个。建议大家,可以先百度,然后和官方文档对照着看。毕竟你在官方文档搜不到你的问题
这是daemon.json,因为我一直push失败,把80改成了5000,其实这个端口号并不影响,我也是随便试的,如果你harbor的http用的默认的80,就不需要往后面写端口号了,再下面是harbor的配置文件
harbor的配置文件,其实http默认80就行,只要别被占用,我改成5000主要是找不到push失败的原因,瞎试的。
搭建完harbor想必大家都访问了一遍了吧,记住这个library
在docker tag的时候,前面是harbor机器的ip,然后是端口号,然后跟harbor项目名称,就是刚才的 library ,然后跟你自己取的名字 再跟tag
#提醒:如果你的harbor是80端口,就不要跟端口号了,直接写ip就行,我写5000,是因为harbor的http地址是5000端口
那么命令就是 sudo docker tag e87e2ed7cd76 192.168.237.143:5000/library/myself/nginx:1.1.0
e87e2ed7cd76 是 myself/nginx 镜像的imageId
这时候我们docker login,这里再说一下,如果你的harbor是80端口,后面就不用写端口号了,直接ip就行,最新版docker加-p参数会说使用--password-stdin什么玩意的,所以干脆别加-p,让它弹出输密码就行了
sudo docker login 192.168.237.143:5000 -u admin
这时候我们docker push就可以了,构建镜像的时候严格按照这个命名规范来写,如果你tag不写ip,你push的时候 就会说你将push到docker.io上并要你输入dockerHub的账号密码,这个问题我也找了半天,明明配置了daemon.json 的 insecure-registries,后来看了看企业部署的Dockerfile,前面都要么是域名,要么是ip,后面跟的必须是harbor的项目名称,就是刚才让你记的library。
不然会push不上去,一直在retry,然后就是500 internal server err。要么就说你的镜像名称不符合规范。我特么还在想,tag名称咋就不符合,也没有粗话呀
sudo docker push 192.168.237.143:5000/library/myself/nginx:1.1.0
最后说一下关机后怎么启动harbor,当然不是再执行install.sh了,而是进到harbor目录下,执行sudo docker-compose up -d,-d就是后台运行。停掉harbor就是sudo docker-compose stop
push镜像失败,可以 vim /var/log/messages 查看日志