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

如何为TestContainers的Generic容器分配更多内存?

问题描述

我有一个测试用例,使用TestContainers技术运行Docker容器,代码如下:

GenericContainer(MY_SAMBA_IMAGE)               
                .withEnv("...")
                .withEnv("...")
                .withEnv("...")
                .withPrivilegedMode(true)
                .waitingFor(...)
                .start()

但运行时出现内存错误,报错信息如下:

17:18:56.884 [docker-java-stream--1885712736] INFO SAMBA_CONTAINER -- STDERR: ERROR(<class 'MemoryError'>): uncaught exception - 
17:18:56.884 [docker-java-stream--1885712736] INFO SAMBA_CONTAINER -- STDERR:   File "/app/inno-samba/lib/python3.7/site-packages/samba/netcmd/__init__.py", line 285, in _run
17:18:56.885 [docker-java-stream--1885712736] INFO SAMBA_CONTAINER -- STDERR:     return self.run(*args, **kwargs)
17:18:56.885 [docker-java-stream--1885712736] INFO SAMBA_CONTAINER -- STDERR:   File "/app/inno-samba/lib/python3.7/site-packages/samba/netcmd/domain/provision.py", line 362, in run
17:18:56.885 [docker-java-stream--1885712736] INFO SAMBA_CONTAINER -- STDERR:     backend_store_size=backend_store_size)
17:18:56.885 [docker-java-stream--1885712736] INFO SAMBA_CONTAINER -- STDERR:   File "/app/inno-samba/lib/python3.7/site-packages/samba/provision/__init__.py", line 2307, in provision
17:18:56.885 [docker-java-stream--1885712736] INFO SAMBA_CONTAINER -- STDERR:     schemadn=names.schemadn, base_schema=base_schema)
17:18:56.885 [docker-java-stream--1885712736] INFO SAMBA_CONTAINER -- STDERR:   File "/app/inno-samba/lib/python3.7/site-packages/samba/schema.py", line 114, in __init__
17:18:56.886 [docker-java-stream--1885712736] INFO SAMBA_CONTAINER -- STDERR:     self.ldb = SamDB(global_schema=False, am_rodc=False)

使用docker-compose运行同一容器时一切正常。请问TestContainers是否会额外限制内存?能否为该容器分配更多内存?

解答
  • TestContainers默认不会额外给容器设置内存限制,它会继承Docker守护进程的默认资源配额。docker-compose能正常运行但TestContainers不行,大概率是因为两者启动容器时的默认资源分配存在差异,或者Docker守护进程的全局限制对TestContainers启动的容器生效更严格。
  • 可以为TestContainers启动的容器分配更多内存,有两种常用方式:
    1. 使用withCreateContainerCmdModifier自定义容器配置:
    GenericContainer(MY_SAMBA_IMAGE)
            .withEnv("...")
            .withPrivilegedMode(true)
            .waitingFor(...)
            .withCreateContainerCmdModifier(cmd -> {
                cmd.getHostConfig().withMemory(4L * 1024 * 1024 * 1024); // 分配4GB内存
                cmd.getHostConfig().withMemorySwap(-1L); // 禁用内存交换限制
            })
            .start();
    
    1. 使用TestContainers提供的简化API(适用于较新版本):
    GenericContainer(MY_SAMBA_IMAGE)
            .withEnv("...")
            .withPrivilegedMode(true)
            .waitingFor(...)
            .withMemory(4L * 1024 * 1024 * 1024)
            .withMemorySwap(-1L)
            .start();
    
  • 另外,也可以检查Docker守护进程的全局资源设置,确保其分配的内存足够容器运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:01:11