问题描述
我正在向 Windows 10 中的 docker 私有注册表添加身份验证。我最初没有实现基本身份验证,但后来,我使用 auth 文件夹中的 htpasswd 文件实现了它。我一直在跟进本教程中给出的说明:https://www.codeproject.com/Articles/1263831/How-to-secure-your-private-Docker-Registry。但是因为 Windows 的 htpasswd 文件有问题,所以我不得不使用 HtPasswd 生成器创建一个 htpasswd 文件并将其复制到我的 auth 文件夹中。
后来,我运行这个命令来构建一个容器并将卷、端口和 htpasswd 文件从主机绑定到我的容器:
docker run -d -p 5000:5000 --name hub.local -v C:\localHub\registry:/var/lib/registry -v C:\localHub\auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/.htpasswd -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 registry:2
它工作正常,我可以看到容器已启动并在端口 5000 上运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41499c3f07e6 registry:2 "/entrypoint.sh /etc…" 17 minutes ago Up 17 minutes 0.0.0.0:5000->5000/tcp hub.local
但是当我尝试使用 docker login 172.16.13.38:5000
登录我的容器时,它要求我输入用户名和密码,但显示相同的错误。
docker login 172.16.13.38:5000
Username: muskan
Password:
Error response from daemon: login attempt to http://172.16.13.38:5000/v2/ Failed with status: 401 Unauthorized
我已经仔细检查了 htpasswd 文件是否在容器的 auth 文件夹中,并且我的注册表位于 http://172.16.13.38:5000/v2/_catalog
请帮我解决这个问题。我无法弄清楚,并且从前两天开始一直在尝试。
muskan:$apr1$k9......$4fyyuas7/VfnuBnPRbFI//
解决方法
你必须使用 bcrypt,所以为了创建 htpasswd 文件使用:
$ htpasswd -cB htpasswd someUsername