日常使用时,我们可以注意到:在创建容器时,Web UI 上其实是允许容器使用虚拟交换机网络而非 NAT 的。这个选项的效果类似于虚拟机平台的虚拟交换机(或者有些时候称之为桥接网络),和直接使用 network_mode: "bridge"
有显著区别。
出于好奇,索性这样创建一个容器,然后直接 SSH 到机器上面看看生成的东西是啥样的。这个容器的实现也很直接,SSH 上去可以直接使用现成的 Docker 的命令行客户端,所以直接看看 Docker 的网络。
可以注意到这里使用了一个定制的 Docker 网络驱动。这下就明白了,然后我们可以来搜一下怎么在 Docker Compose 里调用它。
也比较顺利,直接搜到了官方的文档:Qnet — Container Station documentation (qnap-dev.github.io),这里面给出了示例:
那么直接复制粘贴就可以了。不过也发现一个问题,重新创建应用会导致 MAC 变化,DHCP 服务器上配置的静态分配不生效。此时可以直接给 services.qnet_dhcp
下设置一个 mac_address
属性来指定 MAC 地址,就不会有问题了。
后续
对于熟悉 Docker 的朋友们,可能会发现这个其实类似于 Docker 本身提供的 macvlan 驱动。我在体验了一段时间 qnet 驱动后,因为其缺少 IPv6 实现,也逐步迁移到了 macvlan。因为对性能没有特别要求,所以没有明显感知到区别,只是发现使用 macvlan 的话,网络设置中会存在警告,还没有时间处理。