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
问题原因
- GitHub Actions网络模型差异:在GitHub Actions的容器化Job中,主容器(maven:3.9.1)和services定义的ArcadeDB容器处于同一虚拟网络,但主容器内的
localhost指向自身,而非ArcadeDB服务容器。服务容器的可访问主机名是其配置的服务名称arcadedb。 - 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
相关产品推荐
相关产品推荐

