使用TestContainers .NET C#从ImageFromDockerfileBuilder创建容器
使用TestContainers构建镜像后创建运行容器
你已经成功构建了本地镜像,接下来可以通过以下两种方式用这个镜像创建并运行容器:
方式一:使用GenericContainer直接指定镜像
IFutureDockerImage 的 Reference 属性会返回构建好的镜像标识(名称或ID),你可以把它传给 GenericContainer 来创建容器:
// 构建镜像(你的原有代码) var image = new ImageFromDockerfileBuilder() .WithDockerfileDirectory(CommonDirectoryPath.GetSolutionDirectory(), string.Empty) .WithDockerfile("Dockerfile") .Build(); await image.CreateAsync().ConfigureAwait(false); // 创建并启动容器 using var container = new GenericContainer(image.Reference) .WithPortBinding(8080, 80) // 绑定宿主机端口到容器端口,根据你的应用调整 .WithWaitStrategy(Wait.ForHttp("/health").ForPort(80)); // 等待应用就绪的策略,按需调整 await container.StartAsync().ConfigureAwait(false); // 这里可以添加你的测试逻辑,比如调用容器内的API var baseUrl = $"http://localhost:{container.GetMappedPublicPort(80)}"; // ... 测试代码 // 容器会在using块结束后自动停止并清理
方式二:使用ContainerBuilder结合构建好的镜像
也可以用 ContainerBuilder 来更灵活地配置容器,通过 WithImage 传入构建好的 IFutureDockerImage:
// 构建镜像(你的原有代码) var image = new ImageFromDockerfileBuilder() .WithDockerfileDirectory(CommonDirectoryPath.GetSolutionDirectory(), string.Empty) .WithDockerfile("Dockerfile") .Build(); await image.CreateAsync().ConfigureAwait(false); // 用ContainerBuilder创建容器 var containerBuilder = new ContainerBuilder() .WithImage(image) .WithPortBinding(8080, 80) .WithWaitStrategy(Wait.ForHttp("/health").ForPort(80)); using var container = containerBuilder.Build(); await container.StartAsync().ConfigureAwait(false); // 执行测试逻辑 var baseUrl = $"http://localhost:{container.GetMappedPublicPort(80)}"; // ... 测试代码
关键说明
IFutureDockerImage.Reference是构建后镜像的唯一标识,TestContainers会自动处理镜像的引用。WithWaitStrategy很重要,它确保容器内的应用完全启动后再执行测试,避免因应用未就绪导致的失败。- 使用
using块包裹容器实例,能自动在结束时停止并销毁容器,避免资源泄漏。
内容的提问来源于stack exchange,提问作者smk081
相关产品推荐
相关产品推荐

