在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
相关产品推荐
相关产品推荐

