网络和虚拟机常见问题

当容器运行时,如何限制容器允许的互联网访问类型,以防止其泄露数据或下载恶意代码?

没有内置机制可以实现这一点,但可以通过主机的进程级防火墙来解决。连接到 `com.docker.vpnkit` 用户空间进程并应用规则,规定它可以连接到哪些内容(DNS URL 白名单;数据包/有效负载过滤器)以及允许使用哪些端口/协议。

我可以阻止用户在 0.0.0.0 上绑定端口吗?

没有直接的方法可以通过 Docker Desktop 来强制执行此操作,但它将继承在主机上强制执行的任何防火墙规则。

有哪些选项可以将容器化网络设置锁定到系统?如果不受支持,操纵设置会有什么后果?

Docker 网络设置完全在虚拟机中本地化,对系统没有影响。

我可以通过本地防火墙或 VPN 客户端对容器网络流量应用规则吗?

对于网络连接,Docker Desktop 使用用户空间进程(`com.docker.vpnkit`),该进程继承启动它的用户的防火墙规则、VPN、HTTP 代理属性等约束。

使用 Hyper-V 后端的 Docker Desktop for Windows 是否允许用户创建任意虚拟机?

不可以。`DockerDesktopVM` 名称在服务代码中是硬编码的,因此你无法使用 Docker Desktop 创建或操作任何其他虚拟机。

在 Mac 上使用 Docker Desktop 时,我可以阻止用户创建其他虚拟机吗?

在 Mac 上,启动虚拟机是非特权操作,因此 Docker Desktop 不会强制执行。

使用 Hyper-V 和/或 WSL2 时,Docker Desktop 如何实现网络级隔离?

WSL 2(在 `docker-desktop` 分发版内运行)和 Hyper-V(在 `DockerDesktopVM` 内运行)的虚拟机进程相同。主机/虚拟机通信使用 `AF_VSOCK` 虚拟机管理程序套接字(共享内存)。它不使用 Hyper-V 网络交换机或网络接口。所有主机网络都使用来自 `com.docker.vpnkit.exe` 和 `com.docker.backend.exe` 进程的普通 TCP/IP 套接字执行。有关更多信息,请参阅 Docker Desktop 网络工作原理