Docker Cheat Sheet

容器内连接容器外的网络

主机模式

使用 --net="host" 启动一个Docker容器时,这个容器将不会使用Docker的网络隔离机制,而是直接使用宿主机的网络堆栈。

使用 --net="host" 的含义和效果包括:

  1. 网络命名空间共享:通常,每个Docker容器都运行在自己的网络命名空间中,拥有独立的网络接口、IP地址等。使用 --net="host" 时,容器将共享宿主机的网络命名空间,这意味着容器内部的网络配置(如IP地址、端口、路由等)将与宿主机相同。

  2. 端口映射:在默认的桥接模式下,如果你想让容器内部的应用对外可见,你需要设置端口映射。但是在 --net="host" 模式下,容器内部打开的端口直接映射到宿主机上,无需额外的端口映射配置。

  3. 性能:由于没有额外的网络虚拟化开销,使用宿主网络模式通常会提供更好的网络性能。

  4. 安全性:使用宿主网络模式降低了网络隔离级别,可能会带来安全风险。容器可以直接访问宿主机的网络接口,可能会影响到宿主机的网络安全。

这个选项通常在需要高性能网络或者需要容器直接访问宿主机网络接口的场景中使用。然而,由于它减少了网络隔离,建议仅在信任的应用程序和环境中使用。

DNS 名称 / IP 地址

当容器使用的是 Docker 的默认网络(通常是桥接模式),而不是 --net="host" 或其他自定义网络。

Windows 和 MacOS 使用 host.docker.internal 来解析到宿主机网络。 Linux 使用 172.17.0.1(Docker默认桥接网络的网关地址)来代替。