首页 > 解决方案 > 如何要求用户登录才能推送到 docker 注册表?

问题描述

我想知道如何设置我的docker-compose.yml文件或 docker 注册表,以便用户必须登录才能推送到注册表,但任何用户都可以从注册表中提取。现在,无需登录即可推送到注册表。用户推送时如何要求登录(用户名和密码)?

标签: dockerdocker-composedaemondocker-registry

解决方案


您可以通过在反向代理上配置“基本身份验证”来添加身份验证。

如果您使用 traefik,您可以通过在注册表服务的标签上注册一个中间件来实现:traefik.http.routers.registry.middlewares=securityheaders,admin

并创建这个中间件:traefik.http.middlewares.admin.basicauth.users=admin:${HASHPASSWORD}

然后对注册表的所有请求都需要密码。(下面的完整示例)

要仅在某些路径上应用基本身份验证,您需要遵循此解决方案: Traefik basic auth on path

或使用另一个反向代理:nginx / haproxy / ...

    registry:
        restart: always
        container_name: registry
        image: registry:2
        volumes:
          - ./registry/data:/var/lib/registry
        environment:
          - REGISTRY_STORAGE_DELETE_ENABLED=true
        labels:
            - traefik.enable=true
            - traefik.http.routers.registry.rule=Host(`registry.${DOMAIN}`)
            - traefik.http.services.registry.loadbalancer.server.port=5000
            - traefik.http.routers.registry.tls.certresolver=le
            - traefik.http.routers.registry.entrypoints=websecure

            # apply the admin middleware (created in traefik labels)
            - traefik.http.routers.registry.middlewares=admin

    traefik:
        image: traefik:latest
        container_name: traefik
        restart: always
        labels:
            ...
            # create a middleware named admin, to request a basic authentification of users
            # you can generate a user:password pair with this command :
            # echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g
            - "traefik.http.middlewares.admin.basicauth.users=admin:${HASHPASSWORD}"
            ...


推荐阅读