【问题标题】:How to create a docker network with static IPs using the C# client in windows如何在 Windows 中使用 C# 客户端创建具有静态 IP 的 docker 网络
【发布时间】:2021-03-17 13:13:53
【问题描述】:

我想使用这个客户端用 C# 建立一个 docker 网络:https://github.com/dotnet/Docker.DotNet

我正在使用带有 windows 容器的 windows docker。

基本上我想做的就是通过 C# 客户端执行这个命令(在 cmd 中执行它可以正常工作):

docker network create --driver=nat --subnet=10.123.174.0/23 --gateway=10.123.174.1 my_network

但是,不知何故,我无法正确设置网络。我用了这一小段代码:

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 });

但是网络仍然是用另一个指定的网关创建的,把我的选项只放在网络“选项”数组中:

[
    {
        "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": {}
    }
]

我还尝试仅指定“子网”和“网关”(不带“--”),但结果是一样的。 我做错了什么?

【问题讨论】:

    标签: c# .net docker networking containers


    【解决方案1】:

    从您自己的示例中可以看出,这些设置属于 IPAM.Config (API reference),而不是 Options:

    "IPAM": {
        "Config": [
            {
                "Subnet": "172.29.96.0/20",
                "Gateway": "172.29.96.1"
            }
        ]
    },
    

    您需要创建一个IPAM 对象并将其传递给NetworksCreateParameters.IPAM 参数。这是一个糟糕的例子:

    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 });
    

    抱歉,这个示例可能在某个地方搞砸了,因为我一生中只使用过几次 C#,那是几年前的事了。查看我提到的API reference。您可以在那里找到一些关于预期数据的示例。

    【讨论】:

    • 谢谢,很明显,但不知何故我没看到..:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2020-05-25
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多