docker - 如何要求用户登录才能推送到 docker 注册表?
问题描述
我想知道如何设置我的docker-compose.yml
文件或 docker 注册表,以便用户必须登录才能推送到注册表,但任何用户都可以从注册表中提取。现在,无需登录即可推送到注册表。用户推送时如何要求登录(用户名和密码)?
解决方案
您可以通过在反向代理上配置“基本身份验证”来添加身份验证。
如果您使用 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}"
...
推荐阅读
- reactjs - 失败的道具类型:提供给“查询”的“数组”类型的无效道具“孩子”,预期的“功能”
- kubernetes - 是否可以在没有 PVC 的情况下直接安装 PV?
- c# - C# .NET - 是否有一种简单的方法可以通过单个 ZIP 文件中的 XML 文件集合查询相同的 XML 节点?
- php - PHP:来自xml的希腊字符串转换为ascii并且没有比较
- azure-devops - 未定义变量时如何优雅地使管道失败
- javascript - 如何写入父选项卡的localStorage而不是弹出窗口?
- python-3.x - 在 Keras 中使用功能 API 检查模型输入时出错
- sockets - 是否有超过 max_dgram_qlen 和 wmem_{max,default} 的限制?
- arrays - 如何使用 PowerShell 获取数组文件的内容?
- c# - 在 .net core 中读取或访问自定义配置扩展