如何配置Docker Registry要求推送时登录、同时支持匿名拉取?
Docker Registry 推送强制登录、匿名可拉配置方案
1. 准备认证密码文件
首先创建存储认证信息的目录:mkdir -p ./registry/auth
然后生成账号密码的htpasswd文件,两种方法二选一:
- 本地安装了htpasswd工具:
htpasswd -Bbn 自定义用户名 自定义密码 > ./registry/auth/htpasswd - 本地无htpasswd工具,用Docker镜像生成:
docker run --entrypoint htpasswd httpd:2 -Bbn 自定义用户名 自定义密码 > ./registry/auth/htpasswd
2. 调整docker-compose.yml配置
参考如下配置修改你现有的compose文件,核心是开启htpasswd认证同时允许匿名GET请求:
version: '3.8' services: registry: image: registry:2 ports: - "5000:5000" volumes: - ./registry/data:/var/lib/registry - ./registry/auth:/auth environment: - REGISTRY_AUTH=htpasswd - REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm - REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd # 核心配置:允许匿名GET请求(对应镜像拉取、查询操作) - REGISTRY_AUTH_HTPASSWD_ALLOW_ANONYMOUS_GET=true restart: always
3. 效果验证
- 启动服务:
docker-compose up -d - 匿名拉取验证:执行
docker logout 你的仓库域名/IP:5000后,拉取仓库内已有的镜像,可正常拉取即为配置生效 - 推送权限验证:登出状态下执行镜像推送操作,会返回401 Unauthorized错误,执行
docker login 你的仓库域名/IP:5000输入你设置的用户名密码后,即可正常推送
注意事项
- Registry镜像版本需大于等于2.1,低版本不支持该组合权限配置
- 如果你使用独立的config.yml配置Registry,对应配置层级为
auth.htpasswd.allow_anonymous_get: true,和上述环境变量效果一致 - 生成的htpasswd文件权限需保证容器可读,避免启动时报权限错误
内容的提问来源于stack exchange,提问作者SoftSkills
相关产品推荐
相关产品推荐

