docker 撰写基本身份验证 - “htpasswd 丢失,使用默认用户配置”

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

我正在使用 docker compose 来运行 docker 注册表。我创建了一个命名卷,并将其作为环境变量传递,如下所示:

version: '3.8'
services:
  registry:
    image: registry:2.8
    environment:
      REGISTRY_AUTH_HTPASSWD_PATH: /home/docker-registry/auth/myregistry.com
    volumes:
      - auth:/home/docker-registry/auth
volumes:
  auth:

####### I have also tried using the path /etc/docker/auth

如果我从主机记录文件的内容(生成的 htpasswd 文件),它会回显所需的

user:password
组合。但是,当我使用 compose 启动容器时,我收到以下警告:

level=warning msg="htpasswd is missing, provisioning with default user"

根据发行版文档

警告:如果缺少

htpasswd
文件,将使用默认用户和自动生成的密码创建并配置该文件。密码将打印到标准输出。

由于 docker 在指定卷中找不到

htpasswd
文件,因此它按照承诺在该位置创建文件,使用默认的
user=docker
和生成的密码。我尝试了多种不同的路径,但由于某种原因,它不断覆盖文件。

更新

我发现,如果我删除指定卷,并使用 htpasswd 文件的相对或绝对路径,它不会被覆盖,但我现在无法进行身份验证。如果我执行到容器中并 cat htpasswd 文件,它会显示所需的

user:password
组合,但有些东西不起作用,而当我尝试使用生成的密码使用 docker 用户登录时。

有人遇到过这种情况吗?我在这里做错了什么?如果需要更多信息,请告诉我。

authentication docker-compose docker-registry .htpasswd
1个回答
0
投票

感谢@Phil 让我注意到我的错误!答案就在 dockervolumes 文档的第一行。

卷是持久保存 Docker 容器生成和使用的数据的首选机制。

我一直看到这个片段:

$ mkdir auth $ docker run \ --entrypoint htpasswd \ httpd:2 -Bbn testuser testpassword > auth/htpasswd
我发现这很令人困惑,因为 Docker 运行 

--entrypoint

 然后不执行任何其他操作,这意味着注册表脚本不会运行。现在我明白 Docker 必须使用上面的代码片段创建 htpasswd 文件,然后可以重新启动它以服务注册表。我还没有弄清楚如何在 compose 中使用它,因为我们只想第一次使用入口点功能,但这回答了有关 Docker 忽略卷的问题。另一种选择是使用外部卷。

© www.soinside.com 2019 - 2024. All rights reserved.