You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自建Notary服务对接Nexus私有仓库的配置与问题排查

解决自建Notary对接Nexus私有仓库的配置问题

你已经搞定了Notary基础搭建和初步对接的大部分流程,现在碰到的两个核心问题——默认推送不触发签名、签名后Notary列表查不到内容,我来帮你梳理下需要补充的关键配置:

一、解决默认推送不触发签名的问题

你设置了DOCKER_CONTENT_TRUST=1但sudo docker push未生效,核心原因是sudo会重置环境变量,导致Docker无法读取到你当前用户的环境配置。可以通过以下几种方式解决:

  1. 临时方案:用sudo -E保留环境变量
    执行推送命令时带上-E参数,让sudo继承当前用户的环境变量:

    sudo -E docker push nexus.xyz.com:5000/nginx:latest
    
  2. 持久化方案:给root用户添加环境变量
    编辑root用户的~/.bashrc文件,添加以下内容:

    export DOCKER_CONTENT_TRUST=1
    export DOCKER_CONTENT_TRUST_SERVER=https://notary-server:4443
    

    执行source ~/.bashrc让配置立即生效,之后用sudo执行Docker命令就会默认启用内容信任。

  3. 全局方案:修改Docker daemon配置(推荐)
    编辑Docker daemon配置文件/etc/docker/daemon.json(不存在则创建),添加内容:

    {
      "content-trust": true,
      "content-trust-server": "https://notary-server:4443"
    }
    

    重启Docker服务使配置生效:

    sudo systemctl restart docker
    

    这样所有Docker操作都会默认启用内容信任,无需每次手动设置环境变量。

二、解决notary list看不到可信内容的问题

签名推送后notary list无输出,需要检查以下几个关键配置:

  1. 确保Notary客户端配置指向正确服务器
    检查当前用户(及root用户)的~/.notary/config.json文件,确认server.url字段正确指向你的Notary服务:

    {
      "server": {
        "url": "https://notary-server:4443",
        "root_ca": "root-ca.crt"
      }
    }
    

    注意:如果用sudo执行notary命令,必须确保root用户的~/.notary目录也有相同的配置文件和CA证书,因为sudo会切换到root环境。

  2. 修正notary list的命令格式
    Notary的list命令是针对仓库名而非带tag的镜像名,正确的命令应该是:

    notary list nexus.xyz.com:5000/nginx
    

    (去掉末尾的:latest标签部分)

  3. 让Notary服务器能解析Nexus域名
    你的Notary服务运行在本地容器中,需要确保容器能解析到Nexus的域名。修改docker-compose.yml,给notary_server和notary_signer添加hosts映射:

    services:
      notary_server:
        extra_hosts:
          - "nexus.xyz.com:192.168.x.x" # 替换为Nexus机器的实际IP
      notary_signer:
        extra_hosts:
          - "nexus.xyz.com:192.168.x.x"
    

    修改后重启容器:docker-compose down && docker-compose up -d

  4. 验证Nexus的DCT配置
    确保你的Nexus版本(3.x及以上)支持Docker Content Trust,并且在Nexus的Docker仓库配置中启用了“Enable Docker Content Trust”选项。

  5. 确认Notary服务器使用数据库存储
    检查docker-compose.yml中的notary_server配置,确保它正确连接到mariadb数据库:

    notary_server:
      environment:
        - DB_URL=mysql://notary:notarysecret@mariadb:3306/notaryserver?parseTime=true
    

    这一步确保签名数据被持久化到数据库,而不是容器本地临时存储。

三、验证配置是否生效

完成上述配置后,执行以下步骤验证:

  1. 重新推送镜像(此时应该自动触发签名):
    sudo docker push nexus.xyz.com:5000/nginx:latest
    
  2. 查看仓库的可信内容:
    notary list nexus.xyz.com:5000/nginx
    
  3. 尝试拉取镜像,验证签名是否生效:
    sudo docker pull nexus.xyz.com:5000/nginx:latest
    
    如果配置正确,拉取时会自动验证签名,若签名无效或不存在会直接报错。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:17:02