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

如何使用TestContainers-go初始化带端口、账号密码的MongoDB?

用TestContainers-go配置MongoDB的端口、用户名及密码

要给TestContainers启动的MongoDB容器设置用户名、密码和端口,只需在RunContainer的选项里添加对应配置项即可,具体实现如下:

完整代码示例

import (
    "fmt"
    "testing"

    "github.com/testcontainers/testcontainers-go"
    "github.com/testcontainers/testcontainers-go/modules/mongodb"
)

func TestMongoDBContainer(t *testing.T) {
    ctx := context.Background()
    
    // 定义自定义配置参数
    const (
        mongoUser     = "admin"
        mongoPassword = "test1234"
        hostBindPort  = "27017" // 主机要映射的端口,可自定义
    )

    // 启动配置好的MongoDB容器
    mongodbContainer, err := mongodb.RunContainer(ctx,
        testcontainers.WithImage("mongo:6"),
        // 设置MongoDB初始化超级用户的用户名和密码
        testcontainers.WithEnv(map[string]string{
            "MONGO_INITDB_ROOT_USERNAME": mongoUser,
            "MONGO_INITDB_ROOT_PASSWORD": mongoPassword,
        }),
        // 绑定容器端口到主机指定端口(可选,不需要固定端口可删除此配置)
        testcontainers.WithPortBinding(fmt.Sprintf("%s:%s", hostBindPort, "27017"), testcontainers.BindPortTCP),
    )
    if err != nil {
        t.Fatal(err)
    }

    // 确保测试结束后停止并删除容器
    t.Cleanup(func() {
        if err := mongodbContainer.Terminate(ctx); err != nil {
            t.Fatalf("failed to terminate container: %v", err)
        }
    })

    // 获取带认证信息的MongoDB连接地址
    endpoint, err := mongodbContainer.Endpoint(ctx, "")
    if err != nil {
        t.Fatal(err)
    }
    mongoURI := fmt.Sprintf("mongodb://%s:%s@%s", mongoUser, mongoPassword, endpoint)
    // 后续可使用mongoURI连接MongoDB进行测试
}

关键配置说明

  • 用户名密码设置:借助MongoDB官方镜像的环境变量MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD,容器启动时会自动创建对应的超级管理员账号。
  • 端口映射:通过WithPortBinding将容器默认的MongoDB端口(27017)绑定到主机指定端口。如果不需要固定端口,可直接删除该配置,TestContainers会自动分配随机端口,之后通过Endpoint方法获取实际连接地址即可。
  • 连接字符串:因为开启了认证,连接MongoDB时必须在URI中携带用户名和密码,按照mongodb://<用户名>:<密码>@<连接地址>的格式拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:52:17