当 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");
我正在使用 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");