无法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修复了这个问题!