c# - 如何在 Windows 中使用 C# 客户端创建具有静态 IP 的 docker 网络
问题描述
我想使用此客户端使用 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": {}
}
]
我还尝试仅指定“子网”和“网关”(没有“--”),但结果是一样的。我做错了什么?
解决方案
从您自己的示例中可以看出,这些设置属于 IPAM.Config(API 参考),而不是 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 参考。您可以在那里找到一些关于预期数据的示例。
推荐阅读
- git - 将分支加入新的主提交而不合并?
- node.js - 有人可以向我解释 Sequelize Join 查询吗?
- java - 在服务器崩溃/重新启动时重新启动请求(Spring Boot)
- c++ - void * 从 C 到 CPP 的分配
- php - 如果类别中没有产品,如何从类别下拉列表中删除类别
- sql - 将 CSV 文件从 URL 导入 SQL Fiddle Postgres 9.6 引擎
- javascript - javascript:使用reduce来集体添加某些字段?
- c# - 在 CheckedListBox C# 中搜索项目
- python - 我的代码运行但没有输出任何东西,为什么?
- android - Parcel 0x799b1b22d0:以 96 容量释放 Oppo 设备中的日志消息