# 网卡管理<a name="ZH-CN_TOPIC_0184808032"></a>

## 功能描述<a name="zh-cn_topic_0182200847_section65051811194713"></a>

isulad-tools支持将宿主机上的物理网卡或虚拟网卡插入到容器，在不使用网卡的时候从容器中删除归还给宿主机，并且可以动态修改网卡配置。插入物理网卡即把宿主机上一块网卡直接添加到容器中，插入虚拟网卡则需要先创建一对veth pair，之后将一端插入到容器中。

## 命令格式<a name="zh-cn_topic_0182200847_section9239248135514"></a>

```
isulad-tools [COMMADN][OPTIONS] <container_id>
```

其中：

COMMAND：网卡管理相关的命令。

OPTIONS：网卡管理命令支持的选项。

container\_id：容器id。

## 参数说明<a name="zh-cn_topic_0182200847_section6280182644710"></a>

<a name="zh-cn_topic_0182200847_table1869210387418"></a>
<table><thead align="left"><tr id="zh-cn_topic_0182200847_row1569373816419"><th class="cellrowborder" valign="top" width="23.98%" id="mcps1.1.4.1.1"><p id="zh-cn_topic_0182200847_p106936387415"><a name="zh-cn_topic_0182200847_p106936387415"></a><a name="zh-cn_topic_0182200847_p106936387415"></a>命令</p>
</th>
<th class="cellrowborder" valign="top" width="29.82%" id="mcps1.1.4.1.2"><p id="zh-cn_topic_0182200847_p43193341215"><a name="zh-cn_topic_0182200847_p43193341215"></a><a name="zh-cn_topic_0182200847_p43193341215"></a>功能说明</p>
</th>
<th class="cellrowborder" valign="top" width="46.2%" id="mcps1.1.4.1.3"><p id="zh-cn_topic_0182200847_p15693173814112"><a name="zh-cn_topic_0182200847_p15693173814112"></a><a name="zh-cn_topic_0182200847_p15693173814112"></a>选项说明</p>
</th>
</tr>
</thead>
<tbody><tr id="zh-cn_topic_0182200847_row12693163810415"><td class="cellrowborder" valign="top" width="23.98%" headers="mcps1.1.4.1.1 "><p id="zh-cn_topic_0182200847_p8603174842418"><a name="zh-cn_topic_0182200847_p8603174842418"></a><a name="zh-cn_topic_0182200847_p8603174842418"></a>add-nic</p>
</td>
<td class="cellrowborder" valign="top" width="29.82%" headers="mcps1.1.4.1.2 "><p id="zh-cn_topic_0182200847_p16721336607"><a name="zh-cn_topic_0182200847_p16721336607"></a><a name="zh-cn_topic_0182200847_p16721336607"></a>给容器创建一个网卡。</p>
</td>
<td class="cellrowborder" valign="top" width="46.2%" headers="mcps1.1.4.1.3 "><p id="zh-cn_topic_0182200847_p02913277715"><a name="zh-cn_topic_0182200847_p02913277715"></a><a name="zh-cn_topic_0182200847_p02913277715"></a>支持的选项如下：</p>
<a name="zh-cn_topic_0182200847_ul1875817141814"></a><a name="zh-cn_topic_0182200847_ul1875817141814"></a><ul id="zh-cn_topic_0182200847_ul1875817141814"><li>--type：设置网卡类型，当前只支持eth/veth。</li><li>--name：设置网卡名称，格式为[host:]&lt;container&gt;，host不写是随机名字。</li><li>--ip：设置网卡IP地址。</li><li>--mac：设置网卡mac地址。</li><li>--bridge：设置网卡绑定的网桥。</li><li>--mtu：设置网卡的mtu值，默认1500。</li><li>--update-config-only：如果此flag设置了，只更新配置文件，不会实际做添加网卡的动作。</li><li>--qlen：配置qlen值，默认为1000。</li></ul>
</td>
</tr>
<tr id="zh-cn_topic_0182200847_row12634059013"><td class="cellrowborder" valign="top" width="23.98%" headers="mcps1.1.4.1.1 "><p id="zh-cn_topic_0182200847_p12351181472613"><a name="zh-cn_topic_0182200847_p12351181472613"></a><a name="zh-cn_topic_0182200847_p12351181472613"></a>remove-nic</p>
</td>
<td class="cellrowborder" valign="top" width="29.82%" headers="mcps1.1.4.1.2 "><p id="zh-cn_topic_0182200847_p78191855207"><a name="zh-cn_topic_0182200847_p78191855207"></a><a name="zh-cn_topic_0182200847_p78191855207"></a>从容器中将网卡删除，还原至宿主机。</p>
</td>
<td class="cellrowborder" valign="top" width="46.2%" headers="mcps1.1.4.1.3 "><p id="zh-cn_topic_0182200847_p4233191489"><a name="zh-cn_topic_0182200847_p4233191489"></a><a name="zh-cn_topic_0182200847_p4233191489"></a>支持的选项如下：</p>
<a name="zh-cn_topic_0182200847_ul68987187111"></a><a name="zh-cn_topic_0182200847_ul68987187111"></a><ul id="zh-cn_topic_0182200847_ul68987187111"><li>--type：设置网卡的类型。</li><li>--name：设置网卡的名称，格式为[host:]&lt;container&gt;。</li></ul>
</td>
</tr>
<tr id="zh-cn_topic_0182200847_row915811441301"><td class="cellrowborder" valign="top" width="23.98%" headers="mcps1.1.4.1.1 "><p id="zh-cn_topic_0182200847_p54403352715"><a name="zh-cn_topic_0182200847_p54403352715"></a><a name="zh-cn_topic_0182200847_p54403352715"></a>list-nic</p>
</td>
<td class="cellrowborder" valign="top" width="29.82%" headers="mcps1.1.4.1.2 "><p id="zh-cn_topic_0182200847_p17641112811"><a name="zh-cn_topic_0182200847_p17641112811"></a><a name="zh-cn_topic_0182200847_p17641112811"></a>列出容器中所有的网卡。</p>
</td>
<td class="cellrowborder" valign="top" width="46.2%" headers="mcps1.1.4.1.3 "><p id="zh-cn_topic_0182200847_p164614131884"><a name="zh-cn_topic_0182200847_p164614131884"></a><a name="zh-cn_topic_0182200847_p164614131884"></a>支持的选项如下：</p>
<a name="zh-cn_topic_0182200847_ul1478910231716"></a><a name="zh-cn_topic_0182200847_ul1478910231716"></a><ul id="zh-cn_topic_0182200847_ul1478910231716"><li>--pretty：按照json格式输出。</li><li>--filter：按照过滤格式输出，比如--filter  '{"ip":"192.168.3.4/24", "Mtu":1500}'。</li></ul>
</td>
</tr>
<tr id="zh-cn_topic_0182200847_row17443144712014"><td class="cellrowborder" valign="top" width="23.98%" headers="mcps1.1.4.1.1 "><p id="zh-cn_topic_0182200847_p863734242710"><a name="zh-cn_topic_0182200847_p863734242710"></a><a name="zh-cn_topic_0182200847_p863734242710"></a>update-nic</p>
</td>
<td class="cellrowborder" valign="top" width="29.82%" headers="mcps1.1.4.1.2 "><p id="zh-cn_topic_0182200847_p167205392720"><a name="zh-cn_topic_0182200847_p167205392720"></a><a name="zh-cn_topic_0182200847_p167205392720"></a>更改容器内指定网卡的配置参数。</p>
</td>
<td class="cellrowborder" valign="top" width="46.2%" headers="mcps1.1.4.1.3 "><p id="zh-cn_topic_0182200847_p102662215818"><a name="zh-cn_topic_0182200847_p102662215818"></a><a name="zh-cn_topic_0182200847_p102662215818"></a>支持的选项如下：</p>
<a name="zh-cn_topic_0182200847_ul7172711120"></a><a name="zh-cn_topic_0182200847_ul7172711120"></a><ul id="zh-cn_topic_0182200847_ul7172711120"><li>--name：容器内网卡名（必须项）。</li><li>--ip：设置网卡IP地址。</li><li>--mac：设置网卡mac地址。</li><li>--bridge：设置网卡绑定的网桥。</li><li>--mtu：设置网卡的mtu值。</li><li>--update-config-only：如果此flag设置了，只更新配置文件，不会实际做更新网卡的动作。</li><li>--qlen：配置qlen值。</li></ul>
</td>
</tr>
</tbody>
</table>

## 约束限制<a name="zh-cn_topic_0182200847_section19472134518914"></a>

-   支持添加物理网卡（eth）和虚拟网卡（veth）两种类型。
-   在添加网卡时可以同时对网卡进行配置，参数包括--ip/--mac/--bridge/--mtu/--qlen。
-   支持最多添加8个物理网卡到容器。
-   使用isulad-tools add-nic向容器添加eth网卡后，如果不加hook，在容器退出前必须手工将nic删除，否则在host上的eth网卡的名字会被更改成容器内的名字。
-   对于物理网卡（1822 vf网卡除外），add-nic必须使用原mac地址，update-nic禁止修改mac地址，容器内也不允许修改mac地址。
-   使用isulad-tools add-nic时，设置mtu值，设置范围跟具体的网卡型号有关。
-   使用isulad-tools向容器添加网卡和路由时，建议先执行add-nic添加网卡，然后执行add-route添加路由；使用isulad-tools从容器删除网卡和路由时，建议先执行remove-route删除路由，然后执行remove-nic删除网卡。
-   使用isulad-tools添加网卡时，一块网卡只能添加到一个容器中。

## 使用示例<a name="zh-cn_topic_0182200847_section189257450475"></a>

-   启动一个系统容器，指定hook spec为isulad hook执行配置脚本：

    ```
    [root@localhost ~]# lcrc run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init
    2aaca5c1af7c872798dac1a468528a2ccbaf20b39b73fc0201636936a3c32aa8
    ```


-   添加一个虚拟网卡到容器

    ```
    [root@localhost ~]# isulad-tools add-nic --type "veth" --name abc2:bcd2 --ip 172.17.28.5/24 --mac 00:ff:48:13:xx:xx --bridge docker0 2aaca5c1af7c
    Add network interface to container 2aaca5c1af7c (bcd2,abc2) done  
    ```

-   添加一个物理网卡到容器

    ```
    [root@localhost ~]# isulad-tools add-nic --type "eth" --name eth3:eth1 --ip 172.17.28.6/24  --mtu 1300  --qlen 2100 2aaca5c1af7c
    Add network interface to container 2aaca5c1af7c (eth3,eth1) done
    ```

    >![](public_sys-resources/icon-note.gif) **说明：**   
    >添加虚拟网卡或物理网卡时，请确保网卡处于空闲状态，添加正在使用的网卡会导致系统网络断开。  


