You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何限制Docker引擎仅访问指定镜像仓库?

如何限制Docker引擎仅访问指定镜像仓库?

嘿,这个需求我之前帮朋友处理过,除了你提到的Docker Desktop商业版专属的访问管理功能,还有几个实用的方案,完全适配开源版Docker引擎,不管是服务器还是本地环境都能用:

方法一:Docker Daemon配置+防火墙拦截(简单直接)

这种方式从「强制镜像源」和「网络拦截」两层入手,双管齐下限制访问:

  1. 先把Docker的默认镜像源改成你指定的仓库,编辑/etc/docker/daemon.json(如果没有就新建):
    {
      "registry-mirrors": ["https://your-specified-registry.com"]
    }
    
    保存后重启Docker服务生效:
    sudo systemctl restart docker
    
  2. 再用防火墙规则拦截所有非指定仓库的镜像请求。比如你的指定仓库是registry.example.com,可以用iptables添加规则:
    # 允许访问指定仓库的HTTPS端口
    sudo iptables -A OUTPUT -d registry.example.com -p tcp --dport 443 -j ACCEPT
    # 拒绝访问其他所有常见镜像仓库端口(443是HTTPS,5000是私有仓库默认端口)
    sudo iptables -A OUTPUT -p tcp --dport 443 -m string --string "registry" --algo bm -j DROP
    sudo iptables -A OUTPUT -p tcp --dport 5000 -j DROP
    
    注意:这个规则要根据你的实际情况调整,别误拦了其他正常的HTTPS请求哦。

方法二:用私有仓库做中转代理(根源限制)

如果需要更严谨的控制,可以搭建一个私有镜像仓库(比如Harbor、官方Docker Registry),把它配置成只同步你允许的指定仓库镜像,然后让所有Docker客户端只和这个私有仓库交互:

  • 先搭建私有仓库,配置仓库的镜像同步规则,只拉取你指定源仓库的镜像;
  • 再修改所有Docker客户端的daemon.json,把registry-mirrors设为私有仓库的地址,同时可以添加insecure-registries(如果私有仓库用HTTP的话,生产环境建议用HTTPS);
    这样用户只能从私有仓库拉取镜像,而私有仓库只同步你授权的源,从根源上切断了访问其他仓库的可能。

方法三:用Docker授权插件(细粒度管控)

如果是多用户场景,需要更灵活的权限控制(比如不同用户允许访问不同仓库),可以用Docker的第三方授权插件(比如基于Casbin的开源授权插件):

  • 先部署授权插件,然后在Docker Daemon的启动参数中添加--authorization-plugin=你的插件名称
  • 在插件中配置规则,明确拒绝所有访问非指定仓库的请求,甚至可以细化到「拉取/推送」操作的权限;
    这种方式扩展性很强,适合企业级的权限管理需求。

这些方案都不需要依赖Docker商业版功能,你可以根据自己的环境复杂度选最合适的方式~

备注:内容来源于stack exchange,提问作者MaatDeamon

火山引擎 最新活动