registry v2 多用户问题


我想利用docker registry v2 版本,搭建一个多用户的私有 docker hub。

对于多用户-用户名密码问题,docker registry 支持通过对REGISTRY_AUTH、REGISTRY_AUTH_HTPASSWD_REALM、REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd 三个参数的配置,来管理

生成了用户名zxc和密码zxc

docker run --entrypoint htpasswd registry:2.2 -Bbn zxc zxc >> auth/htpasswd

启动registry

docker run -d -p 5555:5000 --link=registry-redis -e REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR=redis -e REGISTRY_REDIS_ADDR=REDIS_PORT_6379_TCP_ADDR:6379 --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/registry.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key -v /data:/var/lib/registry registry:2.2

遇到的问题是:
官方说“The htpasswd file is loaded once, at startup”,每次往这个htpasswd文件生成一个新的用户名密码,都要重启registry。

我经过测试,也发现,必须重启registry,新增加的用户名和密码,才能在 docker login 时被识别出来,不重启的话,登录会失败。

有没有什么办法,让用户注册用户名密码后,不需要重启registry吗?

多谢!!!!
已邀请:

oilbeater - 北大学渣@灵雀云

赞同来自: zhengxiaochuan zhengyun


谢邀。
有两种方法
  1. registry 可以通过 nginx 和 apache 做一个代理的 authentication,可以参考https://github.com/docker/dist ... es.md
  2. 用 token server 的方式实现比较高级的 authentication ,文档可以参考 https://github.com/docker/dist ... en.md 不过需要自己手动实现,或者直接使用一个开源实现 https://github.com/SUSE/Portus


以上

analyser

赞同来自: zhengxiaochuan


你使用的是 distribution 内建的验证机制,除非它提供方便的机制来 reload 用户名密码库文件,否则就是它所讲的,一定得重启。

你可以考虑加一层 proxy,比如跑一个 nginx,在这层做验证
对于nginx来说,basic auth信息的更新无需reload或restart service

https://github.com/docker/dist ... nx.md

zhengxiaochuan - 京东-云平台南京研发中心-JDOS团队

赞同来自:


多谢两位的回答。nginx代理的方式确实可以,本来以为registry v2自己能搞定呢。

另外,请问oilbeater ,灵雀云是采用的哪种办法,1 or 2? 还有,CA证书是向机构购买的吗?

再次感谢。

zhengxiaochuan - 京东-云平台南京研发中心-JDOS团队

赞同来自:


另外,提供一个介绍 registry auth token 机制的文章
http://dockone.io/article/845

要回复问题请先登录注册