当 mountebank 开始使用 dotnet-testcontainers 时无法访问 Mountebank 冒名顶替者端口

Mountebank imposter ports not accessible when mountebank started using dotnet-testcontainers

我正在使用 dotnet-testcontainers https://github.com/HofmeisterAn/dotnet-testcontainers 在我的 xUnit 测试中启动一个带有 mountebank 的容器。 我可以成功创建江湖骗子客户端并成功创建冒名顶替者。 问题是,当测试为 运行 时,应用程序尝试在 http://localhost:3000 上调用冒名顶替者并被拒绝连接。

我可以成功打开 http://localhost:2525 并且可以看到 Mountebank 默认页面。所以江湖骗子运行宁没问题。我还通过查看 docker 容器日志确认冒名顶替者已在端口 3000 上成功创建。 我还尝试使用 Postman 在 http:localhost:3000 上给我的冒名顶替者打电话,但连接被拒绝。

可能是什么问题?这是 docker 容器中的端口 3000 没有暴露的问题吗?下面是我的代码:

MountebankClient mbClient = new MountebankClient();

var testcontainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
                .WithImage("bbyars/mountebank")
                .WithName("mountebank")
                .WithPortBinding(2525, false)
                .WithHostname("localhost");

var testContainers = testcontainersBuilder.Build();
await testContainers.StartAsync();

var testImposter = mbClient.CreateHttpImposter(3000);
testImposter.AddStub().ReturnsBody(HttpStatusCode.OK, File.ReadAllText(@".\Stubs\testImposter.json"));
mbClient.Submit(testImposter);

可能对遇到此问题的其他人有用。找出问题所在。我没有在容器中映射主机端口和冒名顶替者端口。阅读已发布的端口 https://docs.docker.com/config/containers/container-networking/ 并使用 WithExposedPort(3000) 然后使用 WithPortBinding(3000,3000) 将该端口与主机端口进行端口绑定,其中此方法中的 first 端口是主机端口 second 港口是集装箱港口。

var testcontainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
        .WithImage("bbyars/mountebank")
        .WithName("mountebank")
        .WithPortBinding(2525, 2525)
        .WithExposedPort(3000)
        .WithExposedPort(3100)
        .WithPortBinding(3000, 3000)
        .WithPortBinding(3100, 3100)                 
        .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(2525))
        .WithHostname("localhost");