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

GitLab-CI用私有仓库Docker:dind运行TestContainers遇环境错误

问题:GitLab-CI中使用私有仓库的Docker-in-Docker镜像运行TestContainers失败

背景

出于安全要求,仅允许使用企业内部容器镜像仓库的镜像,尝试在GitLab-CI中通过Docker-in-Docker运行Java TestContainers。

正常工作的配置

使用官方Docker DinD镜像时,流水线正常执行且测试通过,配置如下:

test:
  image: internalregistry.azurecr.io/maven:3.9-eclipse-temurin-17
  services:
    - docker:24.0.5-dind
  stage: test
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_TLS_CERTDIR: ""
    DOCKER_DRIVER: overlay2
  before_script:
    - echo "hub.image.name.prefix=internalregistry.azurecr.io/" > $HOME/.testcontainers.properties
  script:
    - mvn clean test

同步镜像到私有仓库

将官方DinD镜像同步至内部仓库的命令:

docker pull docker:24.0.5-dind
docker tag docker:24.0.5-dind internalregistry.azurecr.io/docker:24.0.5-dind
docker push internalregistry.azurecr.io/docker:24.0.5-dind

修改配置后的报错

将services替换为私有仓库的镜像后:

services:
    - internalregistry.azurecr.io/docker:24.0.5-dind

流水线执行失败,报错:

无法找到有效的Docker环境,请检查配置。
尝试过的配置如下:
UnixSocketClientProviderStrategy:执行失败,异常为InvalidConfigurationException(找不到Unix域套接字)。根本原因是NoSuchFileException (/var/run/docker.sock)
未找到任何有效配置,执行无法继续。

正常执行时,TestContainers的日志显示:

日志记录器":"org.testcontainers.dockerclient.DockerClientProviderStrategy","消息":"通过环境变量、系统属性和默认值找到Docker环境。解析出dockerHost=tcp://docker:2375"

尝试的解决方法及结果

尝试在before_script中指定TestContainers的Docker客户端策略:

before_script:
    - echo "hub.image.name.prefix=internalregistry.azurecr.io/" > $HOME/.testcontainers.properties
    - echo "docker.client.strategy=org.testcontainers.dockerclient.DockerClientProviderStrategy" >> $HOME/.testcontainers.properties

但仍失败,报错:

日志记录器":"org.testcontainers.dockerclient.DockerClientProviderStrategy","消息":"无法从org.testcontainers.dockerclient.DockerClientProviderStrategy实例化策略"

底层错误日志

{"timestamp":"2023-12-19T09:02:21.104Z","level":"WARN","thread":"main","logger":"org.testcontainers.dockerclient.DockerClientProviderStrategy","message":"DOCKER_HOST tcp://docker:2375 未在监听","context":"default"}
{"timestamp":"2023-12-19T09:02:21.280Z","level":"INFO","thread":"main","logger":"org.testcontainers.dockerclient.DockerMachineClientProviderStrategy","message":"未在PATH ([/opt/java/openjdk/bin, /usr/local/sbin, /usr/local/bin, /usr/sbin, /usr/bin, /sbin, /bin]) 中找到docker-machine可执行文件","context":"default"}
{"timestamp":"2023-12-19T09:02:21.281Z","level":"ERROR","thread":"main","logger":"org.testcontainers.dockerclient.DockerClientProviderStrategy","message":"无法找到有效的Docker环境,请检查配置。尝试过的配置如下:\n\tUnixSocketClientProviderStrategy:执行失败,异常为InvalidConfigurationException(找不到Unix域套接字)。根本原因是NoSuchFileException (/var/run/docker.sock)\n未找到任何有效配置,执行无法继续。","context":"default"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:47:01