日期:2021/7/29(星期四)
:::info 1、在私有服务器启动registry容器
:::
docker run -d -p 5000:5000 -v /home/docker/repository:/var/lib/registry registry
参数说明:
- -d:后台启动容器
- -p:将容器的5000端口映射到Host的5000端口(5000是registry的服务端口)
- -v:将容器的/var/lib/registry目录映射到Host的/home/docker/repository目录,用于存放镜像数据
:::danger 2、配置防火墙
:::
firewall-cmd --permanent --add-port=5000/tcp
firewall-cmd --reload
:::success 3、访问http://主机IP:5000/v2,如果返回如下内容说明registry启动成功
:::
:::info 4、客户端重命名待上传的镜像
:::
镜像的名称由repositpry和tag两部分组成
- repostory的完整格式为:[registry-host]:[port]/[username]/xxx
- 只有Docker Hub上的镜像可以省略registry-host:[host],如果使用我们搭建的私有仓库则不能省略。
docker tag hello-docker:latest 10.25.69.233:5000/baosight/hello-docker:v1
:::success 5、客户端上传镜像到私有服务器
:::
docker push 10.25.69.233:5000/baosight/hello-docker:v1
:::info 6、客户端上传失败
:::
错误一:
http: server gave HTTP response to HTTPS client
这是因为Docker从1.3之后,与docker registry交互默认使用的是https,然而我们前面搭建的私有仓库只提供http 服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。
mac客户端解决方法:
Preferences - Docker Engine添加”insecure-registries”: [“registry的IP地址:端口号”]
linux客户端解决方法1:
打开docker.service文件
vi /usr/lib/systemd/system/docker.service
找到ExecStart,在其末尾添加如下内容
ExexStart=/usr/bin/dockerd --insecure-registry 10.25.69.233:5000
使配置生效
systemctl daemon-reload
重启docker
systemctl restart docker
linux客户端解决方法2:
打开daemon.json文件
vim /etc/docker/daemon.json
添加如下内容
{
"insecure-registries": ["registry的IP地址:端口号"]
}
使配置生效
systemctl daemon-reload
重启docker
systemctl restart docker
错误二:
received unexpected HTTP status: 500 Internal Server Error
查看私有服务器SELinux状态
[root@localhost repository]# getenforce
Enforcing
将SELinux状态设置成Permissive
[root@localhost repository]# setenforce 0
[root@localhost repository]# getenforce
Permissive