docker构建本地仓库后,无法登陆解决办法,CentOS/Ubuntu

docker版本为:Server Version: 1.12.6

从dockerhub上下载最新的registry镜像。

首先、构建registry

1、下载registry镜像

  docker pull registry:latest

2、运行registry容器

  在运行容器之前先进行权限配置

    mkdir /home/registry/auth/

    docker run --entrypoint htpasswd registry:latest -Bbn username password>> /home/registry/auth/htpasswd

  以上的命令是创建用户名为 username 密码为 password 的配置文件

  启动容器

  docker run -d -p 5000:5000 --restart=always -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /home/registry/auth/:/auth -v /home/registry/:/var/lib/registry/ registry:latest

3、登陆registry

  docker login IP:5000

  Username: username

  Password: password

Error response from daemon: Get https://IP:5000/v1/users/: http: server gave HTTP response to HTTPS client

  此时提示错误,经过多番查找资料,有以下几种方法解决此问题

  1》在/etc/sysconfig/docker文件中添加一下配置:

    ADD_REGISTRY='--insecure-registry IP:5000'

  为了配置简单,省去安全相关的配置,这里使用--insecure-registry选项。

  修改配置文件后,一定要重启docker服务才能生效,所以执行命令:

  service docker restart

  但是,执行此命令之后docker deamon迟迟无法启动成功,而且还报错。

  所以,继续查找其他解决办法。

  2》配置registry地址的方法:

  对CentOS和Ubuntu都适用的配置文件是

  /etc/docker/daemon.json

  增加:

  { "insecure-registries":["IP:5000"] }

  修改配置文件后,需要重启docker。

  # service docker restart

  再次登陆registry。

  docker login IP:5000

  Username: username

  Password: password

  Login Succeeded

  之后对本地构建的仓库进行push和pull操作,完全正常。此方法验证无其他问题。

  此时查看docker info会发现最下方Insecure Registries: 多出一条信息

  ......

  ......

Registry: https://index.docker.io/v1/

WARNING: No swap limit support

Insecure Registries:

IP:5000

127.0.0.0/8

  

4、执行 push 和 pull 操作

  1》需要将镜像重新命名:

    docker tag registry:latest IP:5000/registry:latest

  2》执行上传命令:

    docker push IP:5000/registry:latest

    删除重新tag的镜像后,进行下载。

  3》执行下载命令:

    docker pull IP:5000/registry:latest

5、通过浏览器查看是否上传成功

  http://IP:5000/v2/_catalog

  会返回json串 如:{"repositories":["csphere/csphere"]}

  查看已上传的镜像的 tags

  http://IP:5000/v2/csphere/csphere/tags/list

  {"name":"csphere/csphere","tags":["0.13.0"]}

其他报错的解决方式一览:

报错:

sza@bogon:~$ docker push 192.168.1.115:5000/busybox:1.0

The push refers to a repository [192.168.1.115:5000/busybox]

unable to ping registry endpoint https://192.168.1.115:5000/v0/

v2 ping attempt failed with error: Get https://192.168.1.115:5000/v2/: EOF

v1 ping attempt failed with error: Get https://192.168.1.115:5000/v1/_ping: EOF

解决办法:

修改Docker配置文件

vim /etc/default/docker

增加以下一行

DOCKER_OPTS="$DOCKER_OPTS --insecure-registry=192.168.1.115:5000"

重启Docker

sudo service docker restart

如果还出现错误的话,说明需要进行如下步骤解决:

vi /lib/systemd/system/docker.service

要加EnvironmentFile=-/etc/sysconfig/docker和编辑ExecStart=/usr/bin/docker -d $other_args -H fd://

systemctl reload

如果报错:

sza@bogon:~$ docker info

An error occurred trying to connect: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.22/info: read unix @->/var/run/docker.sock: read: connection reset by peer

解决:

vim /etc/default/docker

在该文件中添加如下内容:

DOCKER_OPTS="-H unix:///var/run/docker.sock -H 0.0.0.0:5555"

service docker restart