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

使用TestContainers连接SQL Server仅在GitHub Actions中超时求助

解决TestContainers在GitHub Actions中MSSQL连接超时问题

以下是针对你遇到的MSSQL容器在GitHub Actions中执行/opt/mssql-tools/bin/sqlcmd -Q SELECT 1;超时的具体解决方案:

1. 提升GitHub Actions Runner资源配置

GitHub Actions默认托管的ubuntu-latest runner内存资源有限,MSSQL容器启动相对耗资源,容易因内存不足导致启动缓慢。可以在job中申请更多资源:

jobs:
  test:
    runs-on: ubuntu-latest
    resources:
      requests:
        memory: 4G
        cpu: 2

2. 调整MSSQL容器的资源与启动配置

通过环境变量降低MSSQL的资源占用,适配CI环境:

  • 设置MSSQL_PID=Developer:开发者版资源需求远低于企业版
  • 设置MSSQL_MEMORY_LIMIT_MB=2048:限制容器内存使用,避免耗尽runner资源
  • 确保ACCEPT_EULA=Y是必选配置

代码中配置容器示例(Java)

MSSQLContainer<?> mssqlContainer = new MSSQLContainer<>("mcr.microsoft.com/mssql/server:2022-latest")
    .withEnv("ACCEPT_EULA", "Y")
    .withEnv("MSSQL_PID", "Developer")
    .withEnv("MSSQL_MEMORY_LIMIT_MB", "2048")
    .withHealthCheckStrategy(new DefaultHealthCheckStrategy()
        .withStartupTimeout(Duration.ofMinutes(2))
        .withInterval(Duration.ofSeconds(10)));

GitHub Actions YAML中传递环境变量示例

- name: Run tests
  env:
    TESTCONTAINERS_MSSQL_ENV_ACCEPT_EULA: Y
    TESTCONTAINERS_MSSQL_ENV_MSSQL_PID: Developer
    TESTCONTAINERS_MSSQL_MEMORY_LIMIT: 2048
  run: mvn test

3. 提前拉取MSSQL镜像

避免TestContainers启动时等待镜像下载,在测试步骤前先拉取镜像:

- name: Pre-pull MSSQL image
  run: docker pull mcr.microsoft.com/mssql/server:2022-latest

4. 替换手动sqlcmd检查,用TestContainers内置健康检查

不要自行执行sqlcmd验证连接,TestContainers可以自动等待容器健康检查通过后再执行测试。确保容器配置中启用了健康检查,TestContainers会处理就绪状态的等待,避免过早执行sqlcmd导致超时。

5. 排查容器启动日志(故障时)

如果问题依旧,在失败时输出容器日志,定位启动异常:

- name: Show MSSQL container logs
  if: failure()
  run: docker logs $(docker ps -q --filter ancestor=mcr.microsoft.com/mssql/server:2022-latest)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:32:36