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

WSL中Docker替代Docker Desktop后Testcontainers无法识别Docker的解决方法

让Testcontainers识别WSL中运行的Docker(无需Docker Desktop)

问题描述

我在Windows 10中安装了WSL,并通过以下步骤部署Docker:

wsl
sudo apt update 
sudo apt install docker.io -y
wsl docker
doskey docker=wsl docker
wsl docker -v
# 输出:Docker version 24.0.5, build 24.0.5-0ubuntu1~20.04.1

但在IDEA中使用Testcontainers运行自动化测试时,无法识别WSL中的Docker,报错如下:

o.t.d.DockerClientProviderStrategy       : Loaded org.testcontainers.dockerclient.NpipeSocketClientProviderStrategy from ~/.testcontainers.properties, will try it first
2023-09-04 16:19:11.678  INFO 17864 --- [           main] .t.d.DockerMachineClientProviderStrategy : docker-machine executable was not found on PATH ([C:\Program Files\Docker\Docker\resources\bin, C:\ProgramData\DockerDesktop\version-bin, C:\Program Files\Docker, c:\oraclex64\product\12.1.0\client\bin,  C:\Program Files\Common Files\Oracle\Java\javapath, C:\Program Files (x86)\Common Files\Oracle\Java\javapath, C:\WINDOWS\system32, C:\WINDOWS, C:\WINDOWS\System32\Wbem, C:\WINDOWS\System32\WindowsPowerShell\v1.0\, C:\WINDOWS\System32\OpenSSH\, C:\Program Files\PuTTY\, C:\Program Files\TortoiseGit\bin, C:\utils, C:\utils\confluent-7.0.1, C:\ProgramData\chocolatey\bin, C:\Gradle\gradle-6.8\bin, C:\Program Files\Git\cmd, C:\Program Files\JetBrains\PyCharm 2020.2.3\bin, C:\Program Files\JetBrains\PyCharm Community Edition 2020.2.3\bin, C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.1\bin])
2023-09-04 16:19:41.696 ERROR 17864 --- [           main] o.t.d.DockerClientProviderStrategy       : Could not find a valid Docker environment. Please check configuration. Attempted configurations were:
2023-09-04 16:19:41.696 ERROR 17864 --- [           main] o.t.d.DockerClientProviderStrategy       :     NpipeSocketClientProviderStrategy: failed with exception TimeoutException (Timeout waiting for result with exception). Root cause NoSuchFileException (\\.\pipe\docker_engine)
2023-09-04 16:19:41.696 ERROR 17864 --- [           main] o.t.d.DockerClientProviderStrategy       :     NpipeSocketClientProviderStrategy: failed with exception TimeoutException (Timeout waiting for result with exception). Root cause NoSuchFileException (\\.\pipe\docker_engine)
2023-09-04 16:19:41.696 ERROR 17864 --- [           main] o.t.d.DockerClientProviderStrategy       : As no valid configuration was found, execution cannot continue

请问如何配置才能让Testcontainers识别到WSL中的Docker?注:无法使用Docker Desktop。

解决方案

1. 配置WSL中的Docker监听TCP端口

默认Docker仅监听Unix套接字,需修改配置让它同时监听TCP端口,以便Windows侧的Testcontainers访问:

  • 在WSL终端执行,编辑Docker守护进程配置:
    sudo nano /etc/docker/daemon.json
    
  • 添加以下JSON内容(如果文件已有内容,确保hosts字段存在并包含TCP地址):
    {
      "hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]
    }
    
  • 重启Docker服务使配置生效:
    sudo systemctl restart docker
    
  • 验证监听状态:执行ss -tulpn | grep docker,应看到127.0.0.1:2375的监听记录

2. 设置Windows环境变量指定Docker地址

让Testcontainers知道要连接到WSL中的Docker服务:

  • 打开Windows环境变量设置(右键「此电脑」→「属性」→「高级系统设置」→「环境变量」)
  • 添加系统变量:
    • 变量名:DOCKER_HOST
    • 变量值:tcp://localhost:2375
  • 重启IntelliJ IDEA,确保环境变量生效

3. 备选:通过Testcontainers配置文件指定地址

如果环境变量未生效,可在用户目录下创建/编辑~/.testcontainers.properties文件,添加:

docker.host=tcp://localhost:2375

原理说明

Testcontainers默认优先尝试连接Windows平台的Docker npipe套接字(\\.\pipe\docker_engine),这是Docker Desktop的默认配置。而你在WSL中独立安装的Docker不使用该套接字,因此需要显式指定TCP连接地址,让Testcontainers指向WSL中的Docker服务。

安全提示

如果你的设备处于公共网络环境,建议将WSL中Docker的监听地址从0.0.0.0改为127.0.0.1(如上配置),仅允许本地访问,避免暴露Docker服务到公网。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:58:19