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