问题
创建srvice的参数的时候,如果设置了network参数(接口POST:service/create)
[{ "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 3, "Command": [], "ContainerEnv": [], "PortConfig": [ { "Protocol": "tcp", "TargetPort": 80, "PublishedPort": 8081 } ], "Networks": [ { "Target": "chow", "Aliases": null, "DriverOpts": null } ], "UpdateConfig": { "Parallelism": 1, "Delay": 10000000000, "FailureAction": "", "Monitor": null, "MaxFailureRatio": 0, "Order": null }, "RollbackConfig": { "Parallelism": null, "Delay": null, "FailureAction": null, "Monitor": null, "MaxFailureRatio": 0, "Order": "" }, "RestartPolicy": { "Condition": null, "Delay": null, "MaxAttempts": null }, "WarehouseUrl": null, "WarehousePwd": null, "WarehouseUserName": null, "Mount": [] }]
而更新的时候,没有传network参数,会报错:error while removing network:…
更新service参数如下:(接口PUT:/service/update)
{ "ServiceId": "itnl2vrkixib9hlgtmsuj4awu", "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 2 }
同时,因为端口等其他参数也没传,造成更新之后,端口啥的都消失了,截图如下:
1. 创建service的时候
2. 更新service之后
分析错误原因
先不考虑端口等其他问题,先分析造成network错误的原因,上面是创建service的时候设置了network参数,下面对应几个更新service的时候传不同参数的结果
1. 更新的时候 network不变,相当于不更改network,更改副本数
(1)只传部分参数,报错
{ // 更新的时候传的参数 "ServiceId": "9t2jucsc3t1i0t9bx2n7csmjf", "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 2, "Networks": [ { "Target": "chow", "Aliases": null, "DriverOpts": null } ] }
(2)、全量传参,不报错
{ "ServiceId": "i8cdkcbb4o9ly0nczqlgt5l3l", "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 2, "Command": [], "ContainerEnv": [], "PortConfig": [ { "Protocol": "tcp", "TargetPort": 80, "PublishedPort": 8082 } ], "Networks": [ { "Target": "chow", "Aliases": null, "DriverOpts": null } ], "UpdateConfig": { "Parallelism": 1, "Delay": 10000000000, "FailureAction": "", "Monitor": null, "MaxFailureRatio": 0, "Order": null }, "RollbackConfig": { "Parallelism": null, "Delay": 10000000000, "FailureAction": null, "Monitor": null, "MaxFailureRatio": 0, "Order": "" }, "RestartPolicy": { "Condition": null, "Delay": null, "MaxAttempts": null }, "WarehouseUrl": null, "WarehousePwd": null, "WarehouseUserName": null, "Mount": [] }
2. 更新的时候,不传network参数,相当于移除network
(1)部分传参,报错
{ "ServiceId": "tx8882z81lh834uenw4tcgt48", "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 2 }
(2)、全量传参,不报错(参数太多,博客省略部分,实际传参的时候有)
{ "ServiceId": "uvknv24zb8q2iouoz9lv5v13n", "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 2, "Command": [], "ContainerEnv": [], "PortConfig": [ { "Protocol": "tcp", "TargetPort": 80, "PublishedPort": 8082 } ], ....省略 }
3. 更新的时候,传network,但是是添加network
(1)部分传参,报错
{ "ServiceId": "aqp2b7cmrh5egjezenuf0vx6r", "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 2, "Networks": [ { "Target": "chow", "Aliases": null, "DriverOpts": null }, { "Target": "my-net", "Aliases": null, "DriverOpts": null } ] }
(2)全量传参,不报错
{ "ServiceId": "bn0k9vxspi98m8qz9ceh14jc1", "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 2, "Command": [], "ContainerEnv": [], "PortConfig": [ { "Protocol": "tcp", "TargetPort": 80, "PublishedPort": 8082 } ], "Networks": [ { "Target": "chow", "Aliases": null, "DriverOpts": null }, { "Target": "my-net", "Aliases": null, "DriverOpts": null } ], ...省略 }
4. 更新的时候,传network,但是是移除一个network
(1)部分传参,报错
{ "ServiceId": "5k0nt8l45nbycxpzb0o5gzy38", "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 2, "Networks": [ { "Target": "chow", "Aliases": null, "DriverOpts": null } ] }
(2)全量传参,不报错
{ "ServiceId": "21ixmxc0xvh4s0t2jr1ke1ofl", "Image": "nginx", "ImageVersion": "1.17", "ServiceName": "test-chow", "Replicas": 2, "Command": [], "ContainerEnv": [], "PortConfig": [ { "Protocol": "tcp", "TargetPort": 80, "PublishedPort": 8082 } ], "Networks": [ { "Target": "chow", "Aliases": null, "DriverOpts": null } ], ...省略 }
总结以上发现,只要是只传部分参数,就会报错,但我又不能每次更新都让调用接口的人把所有的参数传过来,怎么办呢?