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

Mac M1环境下Testcontainers无法创建/启动容器求助

Mac M1上Testcontainers 1.17.6创建容器时的挂载路径错误解决方法

问题描述

在Mac M1设备上使用Testcontainers 1.17.6创建GenericContainer时触发以下错误:

com.github.dockerjava.api.exception.InternalServerErrorException: Status 500: {"message":"error while creating mount source path '/Users/k/Library/Containers/com.docker.docker/Data/docker.raw.sock': mkdir /Users/k/Library/Containers/com.docker.docker/Data/docker.raw.sock: operation not supported"}

环境信息

  • Docker版本:
Cloud integration: v1.0.29
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.7
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:01:18 2022
 OS/Arch:           darwin/arm64
 Context:           default
 Experimental:      true
Server: Docker Engine - Community
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.7
  Git commit:       3056208
  Built:            Tue Oct 25 17:59:41 2022
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        770bd0108c32f3fb5c73ae1264f7e503fe7b2661
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  • Maven依赖:
<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>testcontainers</artifactId>
    <version>1.17.6</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>1.17.6</version>
    <scope>test</scope>
</dependency>

已尝试的无效操作

  • 确认目标路径存在:
k@m ~ % ls -la /Users/k/Library/Containers/com.docker.docker/Data/docker.raw.sock
srwxr-xr-x@ 1 k  staff  0 Apr  2 23:54 /Users/k/Library/Containers/com.docker.docker/Data/docker.raw.sock
  • 在.testcontainers.properties中禁用检查(配置已加载):
k@mbp ~ % cat .testcontainers.properties 
checks.disable=true

日志验证:

00:02:21.835 [main] DEBUG org.testcontainers.utility.TestcontainersConfiguration - Testcontainers configuration overrides will be loaded from file:/Users/k/.testcontainers.properties
  • 重启Docker
  • 尝试PostgreSQL容器,错误一致

解决方案

1. 升级Testcontainers版本(推荐)

这个问题是Testcontainers 1.17.x版本在Mac M1环境下的已知兼容性bug,核心是Docker Socket路径识别错误。升级到1.18.0及以上版本即可彻底修复。

修改Maven依赖版本:

<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>testcontainers</artifactId>
    <version>1.18.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>1.18.0</version>
    <scope>test</scope>
</dependency>

2. 手动指定Docker Socket路径(临时 workaround)

如果暂时无法升级版本,可以通过代码或系统属性强制指定正确的Docker Socket路径:

代码中指定

GenericContainer<?> container = new GenericContainer<>("your-image:tag")
    .withCreateContainerCmdModifier(cmd -> cmd.withHostConfig(
        new HostConfig().withBinds(new Bind("/var/run/docker.sock", new Volume("/var/run/docker.sock")))
    ));

通过JVM参数指定

在测试启动的JVM参数中添加:

-Dtestcontainers.docker.socket=/var/run/docker.sock

代码中设置系统属性

System.setProperty("testcontainers.docker.socket", "/var/run/docker.sock");

3. 检查Docker Desktop文件共享配置

确保Docker Desktop已授权访问你的用户目录:

  1. 打开Docker Desktop偏好设置
  2. 进入资源 > 文件共享
  3. 确认/Users或/Users/k已被勾选
  4. 点击应用并重启生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:17:10