使用 htpasswd 文件登录 Docker 私有注册表不起作用

问题描述

我正在向 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

请帮我解决这个问题。我无法弄清楚,并且从前两天开始一直在尝试。

htpasswd 文件有这样的内容

muskan:$apr1$k9......$4fyyuas7/VfnuBnPRbFI//

解决方法

你必须使用 bcrypt,所以为了创建 htpasswd 文件使用:

$ htpasswd -cB htpasswd someUsername