From 3ffe7a5d385f8abfc9a73ae3fef64e572263d645 Mon Sep 17 00:00:00 2001
From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com>
Date: Wed, 4 Mar 2026 13:37:47 +0100
Subject: [PATCH 1/2] chore: Simplify integration of the library
---
.../CertificateCredentials.cs | 29 ++++++++++++-------
src/Docker.DotNet/DockerClient.cs | 3 ++
src/Docker.DotNet/DockerClientBuilder.cs | 8 +++--
src/Docker.DotNet/IDockerClient.cs | 2 ++
4 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/src/Docker.DotNet.X509/CertificateCredentials.cs b/src/Docker.DotNet.X509/CertificateCredentials.cs
index a03bf796..d72efbd8 100644
--- a/src/Docker.DotNet.X509/CertificateCredentials.cs
+++ b/src/Docker.DotNet.X509/CertificateCredentials.cs
@@ -18,31 +18,38 @@ public HttpMessageHandler ConfigureHandler(HttpMessageHandler handler)
#if NET6_0_OR_GREATER
if (handler is SocketsHttpHandler socketsHandler)
{
- socketsHandler.SslOptions.ClientCertificates = new X509Certificate2Collection();
- socketsHandler.SslOptions.ClientCertificates.Add(_certificate);
+ if (_certificate != null)
+ {
+ socketsHandler.SslOptions.ClientCertificates = new X509Certificate2Collection();
+ socketsHandler.SslOptions.ClientCertificates.Add(_certificate);
+ }
+
socketsHandler.SslOptions.RemoteCertificateValidationCallback = ServerCertificateValidationCallback;
return socketsHandler;
}
#else
if (handler is HttpClientHandler httpHandler)
{
- httpHandler.ClientCertificates.Add(_certificate);
+ if (_certificate != null && !httpHandler.ClientCertificates.Contains(_certificate))
+ {
+ httpHandler.ClientCertificates.Add(_certificate);
+ }
+
httpHandler.ServerCertificateCustomValidationCallback = (message, certificate, chain, sslPolicyErrors) => ServerCertificateValidationCallback(message, certificate, chain, sslPolicyErrors);
return httpHandler;
}
#endif
- if (handler is not ManagedHandler managedHandler)
+ if (handler is ManagedHandler managedHandler)
{
- return handler;
- }
+ if (_certificate != null && !managedHandler.ClientCertificates.Contains(_certificate))
+ {
+ managedHandler.ClientCertificates.Add(_certificate);
+ }
- if (!managedHandler.ClientCertificates.Contains(_certificate))
- {
- managedHandler.ClientCertificates.Add(_certificate);
+ managedHandler.ServerCertificateValidationCallback = ServerCertificateValidationCallback;
+ return managedHandler;
}
- managedHandler.ServerCertificateValidationCallback = ServerCertificateValidationCallback;
-
return handler;
}
}
\ No newline at end of file
diff --git a/src/Docker.DotNet/DockerClient.cs b/src/Docker.DotNet/DockerClient.cs
index a55ad4f8..e00498e3 100644
--- a/src/Docker.DotNet/DockerClient.cs
+++ b/src/Docker.DotNet/DockerClient.cs
@@ -26,6 +26,7 @@ internal DockerClient(
_clientOptions = clientOptions;
_hijack = hijack;
+ Options = clientOptions;
System = new SystemOperations(this);
Containers = new ContainerOperations(this);
Images = new ImageOperations(this);
@@ -39,6 +40,8 @@ internal DockerClient(
Exec = new ExecOperations(this);
}
+ public ClientOptions Options { get; }
+
public ISystemOperations System { get; }
public IContainerOperations Containers { get; }
diff --git a/src/Docker.DotNet/DockerClientBuilder.cs b/src/Docker.DotNet/DockerClientBuilder.cs
index 4727ead9..2282c5aa 100644
--- a/src/Docker.DotNet/DockerClientBuilder.cs
+++ b/src/Docker.DotNet/DockerClientBuilder.cs
@@ -37,7 +37,7 @@ public DockerClientBuilder()
///
/// The requested API version.
/// The builder instance.
- public DockerClientBuilder WithApiVersion(Version version)
+ public DockerClientBuilder WithApiVersion(Version? version)
{
ClientOptions = ClientOptions with { ApiVersion = version };
return this;
@@ -59,9 +59,11 @@ public DockerClientBuilder WithEndpoint(Uri endpoint)
///
/// The authentication provider.
/// The builder instance.
- public DockerClientBuilder WithAuthProvider(IAuthProvider authProvider)
+ public DockerClientBuilder WithAuthProvider(IAuthProvider? authProvider)
{
- ClientOptions = ClientOptions with { AuthProvider = authProvider };
+ var nonNullableAuthProvider = authProvider ?? NoopAuthProvider.Instance;
+
+ ClientOptions = ClientOptions with { AuthProvider = nonNullableAuthProvider };
return this;
}
diff --git a/src/Docker.DotNet/IDockerClient.cs b/src/Docker.DotNet/IDockerClient.cs
index 0b51b26b..12830241 100644
--- a/src/Docker.DotNet/IDockerClient.cs
+++ b/src/Docker.DotNet/IDockerClient.cs
@@ -2,6 +2,8 @@ namespace Docker.DotNet;
public interface IDockerClient : IDisposable
{
+ ClientOptions Options { get; }
+
ISystemOperations System { get; }
IContainerOperations Containers { get; }
From e2125c1dcd4f03a8d9f31d57c451b41d8146a7e6 Mon Sep 17 00:00:00 2001
From: Andre Hofmeister <9199345+HofmeisterAn@users.noreply.github.com>
Date: Thu, 5 Mar 2026 20:21:14 +0100
Subject: [PATCH 2/2] Update src/Docker.DotNet/DockerClient.cs
---
src/Docker.DotNet/DockerClient.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Docker.DotNet/DockerClient.cs b/src/Docker.DotNet/DockerClient.cs
index e00498e3..c59eb59e 100644
--- a/src/Docker.DotNet/DockerClient.cs
+++ b/src/Docker.DotNet/DockerClient.cs
@@ -26,7 +26,7 @@ internal DockerClient(
_clientOptions = clientOptions;
_hijack = hijack;
- Options = clientOptions;
+ Options = clientOptions;
System = new SystemOperations(this);
Containers = new ContainerOperations(this);
Images = new ImageOperations(this);