docker registry使用用戶名密碼登錄並解決docker login 400 Bad Request錯誤問題


創建存儲憑據的文件夾:

 mkdir -p /root/auth

現在,我將在Docker容器的幫助下創建htpasswd文件。該htpasswd文件將包含我的憑據和加密的passwd。

 docker run --entrypoint htpasswd registry -Bbn myuser mypassword > auth/htpasswd

核實:

cat auth/htpasswd
myuser:$2y$05$8IpPEG94/u.gX4Hn9zDU3.6vru2rHJSehPEZfD1yyxHu.ABc2QhSa

憑據很好。現在,我必須將我的憑據添加到注冊表中。在這里,我將在容器中安裝auth目錄:

   docker run  -d -p 5000:5000 --restart=unless-stopped --name registry-auth \
     -v  /root/auth:/auth \
     -v /data/registry:/var/lib/registry \
     -e "REGISTRY_AUTH=htpasswd" \
     -e  "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
     -e  REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
     registry

測試:

docker push localhost:5000/busybox
The push refers to a repository [localhost:5000/busybox]
8ac8bfaff55a: Image push failed
unauthorized: authentication required

認證:

docker login localhost:5000
Username (): myuser
Password:
Login Succeeded

 注意:因為服務器docker版本問題第一次docker login報錯,Error response from daemon: login attempt to http://192.168.122.190:5000/v2/ failed with status: 400 Bad Request,升級了一下docker版本再docker login就成功了。

重試推送:

docker push localhost:5000/busybox
The push refers to a repository [localhost:5000/busybox]
8ac8bfaff55a: Pushed
latest: digest: sha256:1359608115b94599e5641638bac5aef1ddfaa79bb96057ebf41ebc8d33acf8a7 size: 527b

 

部署支持https的registry

1.安裝docker(安裝指定版本的話可以參考其他文檔)
# docker install docker
2.拉取倉庫鏡像
# docker pull registry
3.生成認證certificate
# mkdir ~/certs
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout /root/certs/domain.key  -x509 -days 365 -out /root/certs/domain.crt
4.復制認證到docker
# mkdir -p /etc/docker/certs.d/pansoft.com:5000
# cp /root/certs/domain.crt  /etc/docker/certs.d/pansoft.com:5000/ca.crt
5.復制認證到本機
# cat /root/certs/domain.crt >> /etc/pki/tls/certs/ca-bundle.crt 
7.啟動倉庫鏡像
# docker run -d -p 5000:5000 --privileged=true -v /opt/docker-registry:/var/lib/registry -v /root/certs/:/root/certs  -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/cer
ts/domain.crt -e REGISTRY_HTTP_TLS_KEY=/root/certs/domain.key registry
8.創建一個鏡像
docker run -it --name=nginx centos /bin/bash
yum install epel-release.noarch -y
yum install nginx -y
docker commit 7ab4d6b6a438 dingyingsi/nginx  //7ab4d6b6a438為容器id
docker tag dingyingsi/nginx pansoft.com:5000/nginx:latest //給當前鏡像打標簽
9.修改當前主機名:
vi /etc/hosts
10.20.31.166 pansoft.com
10.推送鏡像到https私有倉庫
docker push pansoft.com:5000/nginx
11.刪除本地鏡像並重新從https私有倉庫拉取鏡像
docker rmi pansoft.com:5000/nginx
docker pull pansoft.com:5000/nginx
 12.添加http basic authentication
docker run --entrypoint htpasswd  registry -Bbn root pansoft2018 > /root/auth/htpasswd
13.停止倉庫並刪除容器
docker stop  726ae7846612
docker rm  ba29cdf804f07167707eeb871c7d0ee8cc6eab7c82f07f829b2bc91263941627
14.啟動http basic authentication倉庫
docker run -d \
--name registry \
-p 5000:5000 \
--restart=always \
--privileged=true \
-v /opt/docker-registry:/var/lib/registry \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-v /root/auth:/root/auth \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/root/auth/htpasswd" \
-v /root/certs/:/root/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/root/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/root/certs/domain.key \
registry
 
15.登錄倉庫
docker login pansoft.com:5000
username:root
password:pansoft2018
16.其他服務器用這個私有倉庫,直接復制docker的倉庫服務器下的/etc/docker/certs.d下的pansoft.com:5000/ca.cert目錄和文件,到自己的/etc/docker/cert.d/目錄下即可。

參考:https://note.youdao.com/ynoteshare1/index.html?id=62939cb3407c4c6365d2a4c1e7428e00&type=note


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM