无法登录私人码头注册管理机构

时间:2016-09-11 12:29:29

标签: ssl docker login registry docker-registry

我通过以下方式设置了一个私人码头注册表(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

我确保在所有计算机上手动覆盖注册表dns:

# cat /etc/hosts | grep myregistrydomain.com
172.23.67.28 myregistrydomain.com

我在certs下为假主机名myregistrydomain.com创建了一个自签名证书,并使用以下内容添加了一个简单的身份验证:

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并重新启动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

使事情变得更加奇怪,在注册表节点本身上,我运行:

# 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

使它更奇怪,我在注册表节点上运行tcpdump,当我从主机B运行docker login时,我看不到任何数据包! (当然,我确实看到来自主持人B的ping等)

我一直在努力弄清楚我在东道主A上做得对的东西,我在主持人B上无法做到 - 很少成功!谁能让我摆脱困境?

# docker --version # same across all servers
Docker version 1.12.1, build 23cf638

1 个答案:

答案 0 :(得分:5)

grrr ......回答我自己的问题......

所以发生的事情是我正在使用systemctl drop-in ...并且节点B和注册表节点都在RFC1918空间中...所以为了让docker从官方docker下载注册表,它被设置为使用:

[Service]
Environment="HTTP_PROXY=http://<proxy>:3128/"

当然是相当严格的,因此不会将数据包转发到我的私人注册表。

/etc/systemd/system/docker.service.d下删除此dropin修复了问题!

相关问题