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

Clair容器启动报grpc错误及Namespace查询404问题求助

解决Clair容器启动的gRPC连接错误与404无响应问题

Hey 伙计,咱们一步步拆解问题并解决它。那个grpc: addrConn.resetTransport错误明摆着是Clair连不上它依赖的PostgreSQL数据库,这也是为啥你的API请求返回404——没有正常的数据库连接,Clair的HTTP服务根本没法启动起来处理请求。

1. 问题根源分析

  • Clair完全依赖PostgreSQL来存储漏洞数据和服务元信息,要是数据库不可达、认证失败或者压根没创建对应的库,就会触发这个gRPC传输初始化失败的错误。
  • 404响应只是表象,本质是Clair服务进程要么异常退出了,要么卡在初始化阶段,根本没在6060端口上提供API服务。

2. 可用的docker-compose.yml修正配置

你需要确保docker-compose里包含PostgreSQL服务,并且Clair的配置能正确指向它。下面是一套完整可运行的配置:

version: '3.8'

services:
  postgres:
    image: postgres:13-alpine
    environment:
      POSTGRES_USER: clair
      POSTGRES_PASSWORD: clairpassword
      POSTGRES_DB: clair
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U clair -d clair"]
      interval: 10s
      timeout: 5s
      retries: 5

  clair:
    image: quay.io/coreos/clair-git:latest
    ports:
      - "6060:6060"
      - "6061:6061"
    environment:
      CLAIR_DATABASE_SOURCE: host=postgres port=5432 user=clair password=clairpassword dbname=clair sslmode=disable
      CLAIR_API_ADDR: :6060
      CLAIR_HEALTH_ADDR: :6061
    depends_on:
      postgres:
        condition: service_healthy
    volumes:
      - clair_config:/etc/clair
      - clair_local:/var/lib/clair

volumes:
  postgres_data:
  clair_config:
  clair_local:

3. 关键配置细节说明

  • PostgreSQL健康检查:添加healthcheck是为了让Clair只在数据库完全就绪后才启动,避免因为数据库还在初始化导致的连接失败。
  • Clair数据库连接配置:CLAIR_DATABASE_SOURCE必须和PostgreSQL的用户、密码、库名完全匹配,这里用服务名postgres作为主机名就行——docker-compose会自动处理服务间的DNS解析。
  • 端口映射:Clair的HTTP API默认监听6060端口,gRPC服务监听6061端口,确保这两个端口都正确映射到宿主机。

4. 验证与启动步骤

  1. 启动服务:
    docker-compose up -d
    
  2. 查看Clair容器日志,确认没有gRPC连接错误:
    docker-compose logs clair
    
    如果看到类似successfully connected to database的日志,说明数据库连接正常。
  3. 耐心等会儿——首次启动Clair会同步漏洞数据,可能需要几分钟,之后再测试API:
    curl -v http://localhost:6060/v1/namespaces
    
    正常情况下会返回JSON格式的命名空间列表,而不是404了。

5. 额外排查点

要是还是有问题,可以检查这些地方:

  • 确认宿主机的6060端口没被其他进程占用:Linux/macOS用lsof -i :6060,Windows用netstat -ano | findstr :6060。
  • 查看PostgreSQL容器日志,确认数据库是否正常启动:docker-compose logs postgres。
  • 如果你之前的docker-compose里有自定义的Clair配置文件config.yaml,检查里面的数据库连接字符串是否正确——环境变量会覆盖配置文件里的对应项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:34:06