容器网络

预计阅读时间:4分钟

容器使用的网络类型,无论是网桥叠加层macvlan网络还是自定义网络插件,在容器内部都是透明的。从容器的角度来看,它具有一个带有IP地址,网关,路由表,DNS服务和其他网络详细信息的网络接口(假定容器未使用none网络驱动程序)。从容器的角度来看,本主题是关于网络问题的。

已发布的端口

默认情况下,使用docker create或创建或运行容器时docker run,它不会将其任何端口发布到外界。要使端口可用于Docker外部的服务或未连接到容器网络的Docker容器,请使用--publish-p标志。这将创建一个防火墙规则,该规则将容器端口映射到Docker主机上的外部端口。这里有些例子。

标志值 描述
-p 8080:80 将容器中的TCP端口80映射到Docker主机上的端口8080。
-p 192.168.1.100:8080:80 将容器中的TCP端口80映射到Docker主机上的端口8080,以连接到主机IP 192.168.1.100。
-p 8080:80/udp 将容器中的UDP端口80映射到Docker主机上的端口8080。
-p 8080:80/tcp -p 8080:80/udp 将容器中的TCP端口80映射到Docker主机上的TCP端口8080,并将容器中的UDP端口80映射到Docker主机上的UDP端口8080。

IP地址和主机名

默认情况下,为容器连接到的每个Docker网络分配一个IP地址。IP地址是从分配给网络的池中分配的,因此Docker守护程序实际上充当了每个容器的DHCP服务器。每个网络还具有默认的子网掩码和网关。

容器启动时,只能使用来将其连接到单个网络 --network。但是,您可以使用将运行中的容器连接到多个网络docker network connect。使用--network标志启动容器时 ,可以使用--ip--ip6标志指定分配给该网络上的容器的IP地址。

使用将现有容器连接到其他网络时 docker network connect,可以使用该命令上的--ip--ip6标志来指定其他网络上容器的IP地址。

同样,容器的主机名默认为Docker中容器的ID。您可以使用覆盖主机名--hostname。使用来连接到现有网络时docker network connect,可以使用该--alias 标志为该网络上的容器指定其他网络别名。

DNS服务

默认情况下,容器会继承/etc/resolv.conf配置文件中定义的主机的DNS设置 。使用默认bridge 网络的容器将获得此文件的副本,而使用自定义网络的容器将使用 Docker的嵌入式DNS服务器,该服务器会将外部DNS查找转发到主机上配置的DNS服务器。

中定义的自定义主机/etc/hosts不会继承。要将其他主机传递到您的容器中,请参考参考文档 中的将条目添加到容器主机文件docker run。您可以逐个容器覆盖这些设置。

旗帜 描述
--dns DNS服务器的IP地址。要指定多个DNS服务器,请使用多个--dns标志。如果容器无法访问您指定的任何IP地址,8.8.8.8则会添加Google的公共DNS服务器,以便您的容器可以解析Internet域。
--dns-search DNS搜索域,用于搜索非完全限定的主机名。要指定多个DNS搜索前缀,请使用多个--dns-search标志。
--dns-opt 代表DNS选项及其值的键/值对。有关resolv.conf有效选项,请参阅操作系统的说明文件。
--hostname 容器本身使用的主机名。如果未指定,则默认为容器的ID。

代理服务器

如果您的容器需要使用代理服务器,请参阅 使用代理服务器

网络容器独立