0

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

我可以成功打开http://localhost:2525并且可以看到Mountebank默认页面。所以mountebank运行良好。3000我还通过查看 docker 容器日志确认了冒名顶替者是在端口上成功创建的。我还尝试使用 Postman 打电话给我的冒名顶替者http:localhost:3000并拒绝连接。

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

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);
4

1 回答 1

1

可能对面临此问题的其他人有用。弄清楚问题出在哪里。我没有在容器中映射主机端口和冒名顶替者端口。阅读已发布的端口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");
于 2021-12-02T05:38:11.260 回答