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

在Github Actions中获取服务容器日志及解决Testcontainers DNS报错

解决思路
  • 给docker:dind服务容器配置DNS服务器
    GitHub Actions环境中,docker:dind默认的DNS配置可能无法正常解析域名,导致LocalStack找不到上游DNS。在服务容器的配置里显式指定公共DNS(比如8.8.8.8或1.1.1.1):

    services:
      docker:
        image: docker:dind
        options: >-
          --dns 8.8.8.8
          --dns 1.1.1.1
        ports:
          - 2376:2376
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - docker-certs:/certs/client
        environment:
          - DOCKER_TLS_CERTDIR=/certs
    
  • 给Testcontainers启动的LocalStack指定DNS
    如果上面的方法没生效,直接在LocalStack的Testcontainers配置里强制设置DNS:

    LocalStackContainer localStack = new LocalStackContainer(DockerImageName.parse("localstack/localstack:latest"))
      .withCreateContainerCmdModifier(cmd -> cmd.withDns("8.8.8.8"));
    

    也可以在Maven的pom.xml或者Testcontainers配置文件中添加属性:testcontainers.docker.client.dns=8.8.8.8。

  • 获取docker:dind日志的方法
    在GitHub Actions里,要么在服务容器配置中加入logs: true自动输出日志,要么在工作流步骤中手动拉取:

    - name: 拉取docker:dind日志
      run: |
        DIND_CONTAINER=$(docker ps --filter "name=docker" --format "{{.ID}}")
        docker logs $DIND_CONTAINER
    

    注意要确保工作流容器的DOCKER_HOST环境变量正确指向docker服务(比如tcp://docker:2376)。

  • 检查runner的网络DNS可用性
    在工作流里加个步骤测试DNS解析,确认runner环境本身能正常解析域名:

    - name: 测试DNS解析
      run: |
        nslookup localstack.cloud
        nslookup google.com
    

    如果解析失败,说明runner所在网络有DNS限制,只能靠自定义DNS来规避。

  • 降级LocalStack版本
    部分新版本LocalStack的DNS逻辑对dind环境兼容性较差,试试切换到稳定旧版本(比如localstack/localstack:2.3.2),可能能绕过这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:53:20