如何使用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
相关产品推荐
相关产品推荐

