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

Greenbone社区版Docker脚本无法连接GVMD Unix套接字求助

解决Greenbone脚本容器无法连接gvmd套接字的问题

核心问题分析

从日志和现象来看,虽然套接字文件存在且权限开放,但连接被拒绝,大概率是gvmd进程未正常监听套接字,根源是gvmd日志里的pidfile_create: failed to open pidfile /run/gvmd/gvmd.pid: Permission denied错误,导致gvmd初始化不完整。

解决方案

1. 修复gvmd的pidfile权限问题

gvmd无法创建pid文件会导致进程未完全启动,无法监听套接字。调整gvmd容器的配置,确保/run/gvmd目录权限匹配gvmd运行用户:

# 在docker-compose的gvmd服务中添加配置
gvmd:
  # 其他原有配置...
  user: "1001:1001" # 与套接字文件的所有者一致
  volumes:
    - gvmd_socket_vol:/run/gvmd
  # 或者通过启动命令先修复目录权限
  command: >
    sh -c "chown -R 1001:1001 /run/gvmd && exec gvmd --foreground"

2. 确保脚本容器与gvmd的用户权限匹配

脚本容器的运行用户需要能正常访问套接字:

  • 查看脚本容器的运行用户:
    docker compose -f ./openvas-docker-compose.yml -p greenbone-community-edition exec script id
    
  • 如果是非root用户,修改脚本容器的Dockerfile或docker-compose配置,切换到与套接字所有者一致的用户:
    # 在脚本容器的Dockerfile中添加
    RUN useradd -u 1001 gvmuser
    USER gvmuser
    
    或者直接在docker-compose中指定用户:
    script:
      # 其他原有配置...
      user: "1001:1001"
    

3. 验证gvmd是否正常监听套接字

进入gvmd容器,检查是否有进程监听目标套接字:

docker compose -f ./openvas-docker-compose.yml -p greenbone-community-edition exec gvmd netstat -lx | grep gvmd.sock

如果无输出,说明gvmd未正常启动,优先解决pidfile权限问题;如果有输出,再排查脚本容器的连接逻辑。

4. 添加健康检查确保gvmd就绪后启动脚本容器

depends_on仅保证容器启动顺序,不保证服务就绪。添加健康检查让脚本容器等待gvmd完全启动:

# gvmd服务添加健康检查
gvmd:
  # 其他原有配置...
  healthcheck:
    test: ["CMD-SHELL", "netstat -lx | grep gvmd.sock || exit 1"]
    interval: 10s
    timeout: 5s
    retries: 5

# 脚本容器修改depends_on
script:
  # 其他原有配置...
  depends_on:
    gvmd:
      condition: service_healthy

5. 临时替换命名卷为主机绑定挂载(验证用)

如果上述方案仍未解决,可暂时用主机绑定挂载替代命名卷(你之前验证过此方式有效),确认问题是否出在命名卷的权限或配置上:

script:
  volumes:
    - /tmp/run/gvm/gvmd.sock:/run/gvmd/gvmd.sock # 替代原命名卷

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:07:32