无法login到私人dockerregistry
我已经build立了一个私人dockerregistry(V2)通过以下:
docker run -d -p 4000:5000 --restart=always --name registry \ -v `pwd`/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v `pwd`/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \ registry:2
我确保在所有机器上手动覆盖registrydns:
# cat /etc/hosts | grep myregistrydomain.com 172.23.67.28 myregistrydomain.com
我在假主机名myregistrydomain.com
证书下创build了自签名证书,并添加了一个简单的身份validation:
mkdir auth sudo docker run --entrypoint htpasswd registry:2 -Bbn kolla kolla-pass > auth/htpasswd
然后我将.crt
复制到/etc/docker/certs.d/myregistrydomain.com\:4000/ca.crt
和/etc/pki/ca-trust/source/anchors/myregistrydomain.com.crt
并运行update-ca-trust
在所有机器上update-ca-trust
并重新启动docker(centos7)。
在主机A上,我得到:
# docker login --username=kolla --password=kolla-pass myregistrydomain.com:4000 Login Succeeded
然而,在主机B上,我得到:
# docker login --username=kolla --password=kolla-pass https://myregistrydomain.com:4000 Error response from daemon: Get https://myregistrydomain.com:4000/v1/users/: Forbidden
然而,我可以(在主机B上)成功运行:
# curl -k https://kolla:kolla-pass@myregistrydomain.com:4000/v2/_catalog
让事情变得更奇怪,在registry节点本身,我运行:
# docker login --username=kolla --password=kolla-pass myregistrydomain.com:4000 Error response from daemon: Get https://myregistrydomain.com:4000/v1/users/: Forbidden # docker login --username=kolla --password=kolla-pass localhost:4000 Login Succeeded
使它更奇怪,我在registry节点上运行tcpdump
,当我从主机B运行docker login
,我看到没有数据包! (当然,我可以看到来自主机B的ping等)
我一直在试图弄清楚我在主机A上做了什么,我没能在主机B上做 – 只有很less的成功! 谁能让我摆脱苦难?
# docker --version # same across all servers Docker version 1.12.1, build 23cf638
grrr …回答我自己的问题….
所以发生了什么事是我使用的systemctl插件的…节点B和registry节点都在RFC1918空间…所以为了让docker从官方的dockerregistry下载,它被设置为使用:
[Service] Environment="HTTP_PROXY=http://<proxy>:3128/"
这当然是相当严格的,因此不会将数据包转发到我的私人registry。
删除/etc/systemd/system/docker.service.d
下的这个dropin修复了这个问题!