У меня есть два контейнера, которыми я управляю с помощью TestContainers в среде .NET. Один контейнер использует MsSqlBuilder
вот так:
var sqlContainer = new MsSqlBuilder()
.WithImage("mcr.microsoft.com/mssql/server:2022-latest")
.WithPassword("Passw0rd#123")
.WithNetwork(network)
.WithWaitStrategy(Wait.ForUnixContainer().UntilCommandIsCompleted("/opt/mssql-tools18/bin/sqlcmd -C -S localhost -U sa -P \"Passw0rd#123\" -Q \"SELECT 1\" -b -o /dev/null"))
.Build();
У меня есть еще один контейнер, в котором работает приложение-функция Azure, например:
var functionContainer = new ContainerBuilder()
.WithImage(image)
.WithPortBinding(80, true)
.WithWaitStrategy(Wait.ForUnixContainer().UntilHttpRequestIsSucceeded(r => r.ForPort(80), strategy => strategy.WithTimeout(30.Seconds())))
.WithNetwork(network)
.WithEnvironment(new Dictionary<string, string>
{
{ "ConnectionStrings:Notification", notificationConnectionString }
});
Я могу запустить приложение «Функция Azure», но когда я пытаюсь вызвать конечную точку, которая взаимодействует с моим контейнером SQL Server, я получаю следующее сообщение:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
Я могу взаимодействовать с образом SQL Server со своего хост-компьютера, поэтому уверен, что мне просто не хватает сетевых настроек. Вот как я инициализирую свою сеть:
var network = new NetworkBuilder()
.WithName(Guid.NewGuid().ToString("D"))
.Build();
Мне нужно, чтобы мой контейнер функций Azure взаимодействовал с контейнером SQL Server, и я подумал, что для этого можно поместить их в одну сеть. Я могу убедиться, что строка подключения установлена правильно, поскольку я могу подключиться, используя ту же строку подключения, на своем хост-компьютере.
Моя проблема была вызвана тем, что я не включил .WithHostname(hostName)
в мой SQL Container Builder и использовал строку подключения, которая использовала 127.0.0.1
вместо этого hostName
.