日期:2021/7/29(星期四)

    :::info 1、在私有服务器启动registry容器

    :::

    1. 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、配置防火墙

    :::

    1. firewall-cmd --permanent --add-port=5000/tcp
    2. firewall-cmd --reload

    :::success 3、访问http://主机IP:5000/v2,如果返回如下内容说明registry启动成功

    :::

    🎉 docker registry - 图1

    :::info 4、客户端重命名待上传的镜像

    :::

    镜像的名称由repositpry和tag两部分组成

    • repostory的完整格式为:[registry-host]:[port]/[username]/xxx
    • 只有Docker Hub上的镜像可以省略registry-host:[host],如果使用我们搭建的私有仓库则不能省略。
    1. docker tag hello-docker:latest 10.25.69.233:5000/baosight/hello-docker:v1

    :::success 5、客户端上传镜像到私有服务器

    :::

    1. docker push 10.25.69.233:5000/baosight/hello-docker:v1

    :::info 6、客户端上传失败

    :::

    错误一:

    1. 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地址:端口号”]

    🎉 docker registry - 图2

    linux客户端解决方法1:

    打开docker.service文件

    1. vi /usr/lib/systemd/system/docker.service

    找到ExecStart,在其末尾添加如下内容

    1. ExexStart=/usr/bin/dockerd --insecure-registry 10.25.69.233:5000

    使配置生效

    1. systemctl daemon-reload

    重启docker

    1. systemctl restart docker

    linux客户端解决方法2:

    打开daemon.json文件

    1. vim /etc/docker/daemon.json

    添加如下内容

    1. {
    2. "insecure-registries": ["registry的IP地址:端口号"]
    3. }

    使配置生效

    1. systemctl daemon-reload

    重启docker

    1. systemctl restart docker

    错误二:

    1. received unexpected HTTP status: 500 Internal Server Error

    查看私有服务器SELinux状态

    1. [root@localhost repository]# getenforce
    2. Enforcing

    将SELinux状态设置成Permissive

    1. [root@localhost repository]# setenforce 0
    2. [root@localhost repository]# getenforce
    3. Permissive