Quiero configurar una red docker con C# usando este cliente: https://github.com/dotnet/Docker.DotNet .
Estoy usando Docker para Windows con contenedores de Windows.
Básicamente, todo lo que quiero hacer es ejecutar este comando a través del cliente C# (ejecutarlo en cmd funciona bien):
docker network create --driver=nat --subnet=10.123.174.0/23 --gateway=10.123.174.1 my_networkSin embargo, de alguna manera no logro configurar la red correctamente. Yo uso este pequeño fragmento de código:
Dictionary<string, string> options = new Dictionary<string, string>(); options.Add("--gateway", "10.123.174.1"); options.Add("--subnet", "10.123.174.0/23"); await _client.Networks.CreateNetworkAsync(new NetworksCreateParameters { Driver = "nat", Name = "my_network", Options = options });Pero la red todavía se crea con otra puerta de enlace que la especificada, colocando mis opciones solo en la matriz de "opciones" de la red:
[ { "Name": "my_network", "Id": "2bb2fabfa84518a2a11eff881c859bf324ce732c308a1d5a4d541c74870f5e70", "Created": "2021-03-17T14:09:01.694993+01:00", "Scope": "local", "Driver": "nat", "EnableIPv6": false, "IPAM": { "Driver": "windows", "Options": null, "Config": [ { "Subnet": "172.29.96.0/20", "Gateway": "172.29.96.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": { "--gateway": "10.123.174.1", "--subnet": "10.123.174.0/23", "com.docker.network.windowsshim.hnsid": "3065184F-EFAF-4537-AF64-F2CD373A3261" }, "Labels": {} } ]También intenté especificar solo "subred" y "puerta de enlace" (sin "--") pero el resultado fue el mismo. ¿Qué hago mal?
Como puede ver en su propio ejemplo, esta configuración pertenece a IPAM.Config ( referencia de API ), no a Opciones:
"IPAM": { "Config": [ { "Subnet": "172.29.96.0/20", "Gateway": "172.29.96.1" } ] },Debe crear un objeto IPAM y pasarlo al argumento NetworksCreateParameters.IPAM . Aquí hay un mal ejemplo:
Dictionary<string, string> options = new Dictionary<string, string>(); options.Add("Gateway", "10.123.174.1"); options.Add("Subnet", "10.123.174.0/23"); IList<Dictionary<string, string>> configs = new IList<Dictionary<string, string>>(); configs.Add(options); Dictionary<string, IList<Dictionary<string, string>>> ipam = new Dictionary<string, IList<Dictionary<string, string>>>(); ipam.Add("Config", configs); await _client.Networks.CreateNetworkAsync(new NetworksCreateParameters { Driver = "nat", Name = "my_network", IPAM = ipam });Lo siento, podría haberme metido en alguna parte con el ejemplo ya que solo usé C# un par de veces en mi vida y eso fue hace años. Consulte la referencia de la API que mencioné. Puede encontrar allí algunos ejemplos sobre qué datos se esperan.