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

自建Docker私有仓库如何设置镜像公开?拉取免登录、推送需认证

绝对可以实现!你想要的这种「匿名拉取+认证推送」的权限模型,不管是用官方Docker Registry还是更易用的企业级工具都能搞定,下面给你两种具体的实现方案:

方案一:官方Docker Registry原生配置(轻量型)

官方Docker Registry v2版本支持通过配置文件实现匿名拉取、认证推送的规则,步骤如下:

  1. 创建认证用户库
    首先用htpasswd工具生成用户密码文件(如果系统没装,先安装apache2-utils包):

    htpasswd -Bc /opt/registry/htpasswd admin
    

    执行后输入密码,就会在/opt/registry/下生成包含认证用户的htpasswd文件。

  2. 编写Registry配置文件
    创建/opt/registry/config.yml,内容如下:

    version: 0.1
    log:
      fields:
        service: registry
    storage:
      filesystem:
        rootdirectory: /var/lib/registry
    http:
      addr: :5000
      headers:
        X-Content-Type-Options: [nosniff]
    auth:
      htpasswd:
        realm: Registry Realm
        path: /etc/docker/registry/htpasswd
    middleware:
      registry:
        - name: authorization
          options:
            access:
              repository:
                pull: ["*"]  # 允许所有用户(包括匿名)拉取
                push: ["authenticated"]  # 仅认证用户可推送
    

    核心是middleware里的权限规则,明确拉取开放给所有人,推送仅限已认证用户。

  3. 启动Registry容器
    挂载配置文件、密码文件和镜像存储目录,启动容器:

    docker run -d -p 5000:5000 \
      --name private-registry \
      -v /opt/registry/data:/var/lib/registry \
      -v /opt/registry/config.yml:/etc/docker/registry/config.yml \
      -v /opt/registry/htpasswd:/etc/docker/registry/htpasswd \
      registry:2
    
  4. 测试验证

    • 拉取测试:内网用户无需登录,直接执行docker pull your-registry-ip:5000/your-image:tag,应该能成功拉取。
    • 推送测试:未登录时执行docker push your-registry-ip:5000/your-image:tag会报错,必须先执行docker login your-registry-ip:5000输入账号密码,才能推送成功。
方案二:用Harbor实现可视化的公开镜像管理(企业级)

如果需要更直观的UI管理、多项目隔离或更精细化的权限,推荐用VMware开源的Harbor仓库,它原生支持「公开项目」功能,步骤更简单:

  1. 部署Harbor
    下载Harbor安装包,修改harbor.yml配置文件(设置内网访问地址、admin密码等),然后执行install.sh完成部署(过程很简单,跟着提示走就行)。

  2. 创建公开项目
    登录Harbor的Web UI,点击「新建项目」:

    • 填写项目名称,勾选「公开项目」选项(这个选项开启后,所有用户包括匿名用户都能拉取该项目下的镜像)。
    • 项目创建后,你可以给特定用户分配「开发者」或「管理员」角色,只有这些角色的用户才能推送镜像到该项目。
  3. 测试验证

    • 拉取测试:内网用户无需登录,直接执行docker pull harbor-ip/your-public-project/your-image:tag即可拉取。
    • 推送测试:未登录时推送会失败,登录Harbor后,只有拥有项目推送权限的用户才能执行docker push harbor-ip/your-public-project/your-image:tag

内容的提问来源于stack exchange,提问作者singhspk

火山引擎 最新活动