From 7eae8c64d35516d69db1bba8b0e85b893a38ffbb Mon Sep 17 00:00:00 2001 From: Tim Potze Date: Tue, 8 Jun 2021 10:34:54 +0200 Subject: [PATCH] Bind port in docker with udp flag when protocol is udp (#915) * Bind port in docker with udp flag when port protocol is udp * Update src/Microsoft.Tye.Hosting/DockerRunner.cs Co-authored-by: Justin Kotalik * Added error when using udp binding for project service Co-authored-by: Justin Kotalik --- src/Microsoft.Tye.Hosting/DockerRunner.cs | 7 ++++++- src/Microsoft.Tye.Hosting/ProxyService.cs | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Tye.Hosting/DockerRunner.cs b/src/Microsoft.Tye.Hosting/DockerRunner.cs index ba193b69..4a235285 100644 --- a/src/Microsoft.Tye.Hosting/DockerRunner.cs +++ b/src/Microsoft.Tye.Hosting/DockerRunner.cs @@ -79,6 +79,11 @@ namespace Microsoft.Tye.Hosting continue; } + if (string.Equals(binding.Protocol, "udp", StringComparison.InvariantCultureIgnoreCase)) + { + throw new CommandException("Proxy does not support the udp protocol yet."); + } + var b = new ServiceBinding() { ConnectionString = binding.ConnectionString, @@ -232,7 +237,7 @@ namespace Microsoft.Tye.Hosting // These are the ports that the application should use for binding // 1. Tell the docker container what port to bind to - portString = docker.Private ? "" : string.Join(" ", ports.Select(p => $"-p {p.Port}:{p.ContainerPort ?? p.Port}")); + portString = docker.Private ? "" : string.Join(" ", ports.Select(p => $"-p {p.Port}:{p.ContainerPort ?? p.Port}{(string.Equals(p.Protocol, "udp", StringComparison.OrdinalIgnoreCase) ? "/udp" : string.Empty)}")); if (docker.IsAspNet) { diff --git a/src/Microsoft.Tye.Hosting/ProxyService.cs b/src/Microsoft.Tye.Hosting/ProxyService.cs index b11d60fa..cb444c86 100644 --- a/src/Microsoft.Tye.Hosting/ProxyService.cs +++ b/src/Microsoft.Tye.Hosting/ProxyService.cs @@ -63,6 +63,11 @@ namespace Microsoft.Tye.Hosting continue; } + if (string.Equals(binding.Protocol, "udp", StringComparison.InvariantCultureIgnoreCase)) + { + throw new CommandException("Proxy does not support the udp protocol yet."); + } + var ports = binding.ReplicaPorts; // We need to bind to all interfaces on linux since the container -> host communication won't work