Meziantou.Framework.TemporaryContainers
1.0.4
Prefix Reserved
dotnet add package Meziantou.Framework.TemporaryContainers --version 1.0.4
NuGet\Install-Package Meziantou.Framework.TemporaryContainers -Version 1.0.4
<PackageReference Include="Meziantou.Framework.TemporaryContainers" Version="1.0.4" />
<PackageVersion Include="Meziantou.Framework.TemporaryContainers" Version="1.0.4" />
<PackageReference Include="Meziantou.Framework.TemporaryContainers" />
paket add Meziantou.Framework.TemporaryContainers --version 1.0.4
#r "nuget: Meziantou.Framework.TemporaryContainers, 1.0.4"
#:package Meziantou.Framework.TemporaryContainers@1.0.4
#addin nuget:?package=Meziantou.Framework.TemporaryContainers&version=1.0.4
#tool nuget:?package=Meziantou.Framework.TemporaryContainers&version=1.0.4
Meziantou.Framework.TemporaryContainers
Manage temporary containers for integration tests by driving a container runtime CLI, so no daemon SDK is required.
Supported runtimes (auto-detected, or set ContainerDefinition.Runtime): docker, podman, Apple's container (macOS), and wslc (Windows/WSL).
var definition = new ContainerDefinition(ImageSource.FromRegistry("redis:8"));
definition.Environment.Add("ALLOW_EMPTY_PASSWORD", "yes");
definition.Ports.Add(new ContainerPort(6379));
definition.WaitStrategies.Add(Wait.ForPort(6379));
await using var container = definition.CreateContainer();
await container.StartAsync();
var hostPort = container.GetMappedPort(6379);
// connect to 127.0.0.1:hostPort
StartAsync creates the container, starts it, and runs the registered wait strategies before returning.
The container is removed when disposed. Set ContainerDefinition.ReuseId to reuse an existing container across runs; reused containers are not removed on dispose.
Building an image
var definition = new ContainerDefinition(ImageSource.FromDockerfile("./Dockerfile", "."));
definition.Ports.Add(new ContainerPort(8080));
definition.WaitStrategies.Add(Wait.ForLogMessage("SERVER READY"));
await using var container = definition.CreateContainer();
await container.StartAsync();
Database helpers
CreateRedis, CreatePostgreSql, CreateMongoDb, and CreateSqlServer return pre-configured definitions whose container exposes GetConnectionString().
await using var redis = ContainerDefinition.CreateRedis().CreateContainer();
await redis.StartAsync();
var redisConnectionString = redis.GetConnectionString(); // 127.0.0.1:<port>
var postgresDefinition = ContainerDefinition.CreatePostgreSql(); // or CreatePostgreSql(ImageSource.FromRegistry("postgres:16"))
postgresDefinition.Environment.Add("POSTGRES_DB", "mydb");
await using var postgres = postgresDefinition.CreateContainer();
await postgres.StartAsync();
var postgresConnectionString = postgres.GetConnectionString(); // Host=127.0.0.1;Port=<port>;Username=postgres;******;Database=mydb
await using var mongo = ContainerDefinition.CreateMongoDb().CreateContainer();
await mongo.StartAsync();
var mongoConnectionString = mongo.GetConnectionString(); // mongodb://127.0.0.1:<port>
var sqlDefinition = ContainerDefinition.CreateSqlServer();
// Optional: override the generated strong random password
sqlDefinition.SaPassword = "Abcdef1!Abcdef1!";
await using var sqlServer = sqlDefinition.CreateContainer();
await sqlServer.StartAsync();
var sqlServerConnectionString = sqlServer.GetConnectionString(); // Server=127.0.0.1,<port>;Database=master;User Id=sa;Pwd=<password>;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30
Interacting with a container
var result = await container.ExecAsync(options =>
{
options.Command.Add("echo");
options.Command.Add("hello");
});
await using var stream = await container.OpenReadAsync("/etc/hostname");
await foreach (var log in container.GetLogsAsync())
Console.WriteLine(log.Message);
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. net11.0 is compatible. |
-
net10.0
- Meziantou.Framework.FullPath (>= 3.0.1)
- Meziantou.Framework.ProcessWrapper (>= 2.0.2)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.10)
-
net11.0
- Meziantou.Framework.FullPath (>= 3.0.1)
- Meziantou.Framework.ProcessWrapper (>= 2.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.