docker 如何在Testcontainer的MsSqlContainer上冻结端口号?

y3bcpkx1  于 12个月前  发布在  Docker
关注(0)|答案(1)|浏览(160)

我已经花了一些时间来弄清楚如何让Testcontainer的MsSqlContainer为我的集成测试旋转起来.它工作正常,但是.如果每次都是随机的,你如何告诉真实的API它在哪个端口上运行?
我觉得我应该能够冻结该值并将其存储在appsettings.dev中,同意吗?

readonly MsSqlContainer _msSqlContainer 
        = new MsSqlBuilder().WithName("MockSqlDb")
                            .WithPortBinding(8081) // Cannot connect to localhost, 8080 🙁
                            .WithExposedPort(8082) // Cannot connect to localhost, 8081 🙁
                            .Build();
    public Task InitializeAsync() 
    { 
        var launchContainerTask = _msSqlContainer.StartAsync();
        launchContainerTask.Wait();

        var cs = _msSqlContainer.GetConnectionString(); // TODO: freeze the port number 🤔? 
        using (SqlConnection connection = new SqlConnection(cs))
        {
            // setup database, table, and seed data 😎
        }
        return Task.CompletedTask;
    }    
    public Task DisposeAsync() => _msSqlContainer.DisposeAsync().AsTask();

字符串
目前,我在调试过程中复制粘贴连接字符串(当然,我也可以在docker中看到它)。

ki1q1bka

ki1q1bka1#

与依赖于固定端口不同,您应该将作为GetConnectionString()返回值的一部分的动态Map的随机端口注入到您的测试系统中。您可以在this best practices article中找到有关此背后原因的更多详细信息(其中有Java示例,但概念在不同语言中保持不变)。

相关问题