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

问题描述 投票:0回答:2

我在 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//

docker security passwords docker-registry .htpasswd
2个回答
11
投票

您必须使用 bcrypt,因此要创建 htpasswd 文件,请使用:

$ htpasswd -cB htpasswd someUsername

0
投票
docker run --entrypoint htpasswd httpd:2 -Bbn USERNAM_HERE PASSWORD_HERE > PATH_TOVOLUME/htpasswd

获得 htpasswd 文件后,指向它的位置

这里的例子是使用 docker-compose

      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
      REGISTRY_STORAGE_DELETE_ENABLED: 'true
© www.soinside.com 2019 - 2024. All rights reserved.