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

GitHub Actions中ArcadeDB服务端口共享连接失败排查

GitHub Actions中ArcadeDB连接失败问题排查

问题背景

在GitHub项目中尝试连接ArcadeDB实例,使用的Workflow配置如下:

name: Java CI with Maven

on:
  push:
    branches: [ $default-branch ]
  pull_request:
    branches: [ $default-branch ]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: maven:3.9.1
    services:
        arcadedb:
            image: gfinger/arcadedb:23.3.1
            ports:
                - 2480:2480
    steps:
    - uses: actions/checkout@v3
    - name: Build with Maven
      run: mvn -B package --file pom.xml
    - name: Verify with Maven
      run: mvn -B verify --file pom.xml

ArcadeDB容器的入口点配置:

...
ENV JAVA_OPTS="-Darcadedb.server.rootPassword=playwithdata \
-Darcadedb.server.plugins=Redis:com.arcadedb.redis.RedisProtocolPlugin,MongoDB:com.arcadedb.mongo.MongoDBProtocolPlugin,Postgres:com.arcadedb.postgres.PostgresProtocolPlugin,GremlinServer:com.arcadedb.server.gremlin.GremlinServerPlugin "
ENTRYPOINT ["./bin/server.sh"]

测试时出现连接拒绝错误:Connection refused: localhost/127.0.0.1:2480,但相同镜像在Docker Compose环境下能正常连接,Docker Compose配置如下:

version: '3.8'
services:
  devcontainer:
    image: maven:3.9.1
    volumes:
      - ../..:/workspaces:cached
    network_mode: service:db
    command: sleep infinity

  db:
    image: gfinger/arcadedb:23.3.1
    restart: unless-stopped

问题原因

  1. GitHub Actions网络模型差异:在GitHub Actions的容器化Job中,主容器(maven:3.9.1)和services定义的ArcadeDB容器处于同一虚拟网络,但主容器内的localhost指向自身,而非ArcadeDB服务容器。服务容器的可访问主机名是其配置的服务名称arcadedb。
  2. Docker Compose网络配置不同:Docker Compose中使用network_mode: service:db让devcontainer共享db容器的网络栈,因此localhost能直接访问到数据库服务,这和GitHub Actions的网络逻辑完全不同。

解决方案

核心修复:修改数据库连接地址

将测试代码中的数据库连接地址从localhost:2480改为arcadedb:2480,直接通过服务名称访问数据库容器。

辅助优化:等待数据库就绪(可选)

为避免数据库未完全启动就执行测试导致的连接失败,可在Workflow中添加等待步骤:

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: maven:3.9.1
    services:
        arcadedb:
            image: gfinger/arcadedb:23.3.1
    steps:
    - uses: actions/checkout@v3
    - name: 等待ArcadeDB服务就绪
      run: |
        until curl -s http://arcadedb:2480/api/v1/server | grep -q "status.*ONLINE"; do
          echo "等待ArcadeDB启动..."
          sleep 5
        done
    - name: Build with Maven
      run: mvn -B package --file pom.xml
    - name: Verify with Maven
      run: mvn -B verify --file pom.xml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:29:57