容器网络
预计阅读时间: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。 |
代理服务器
如果您的容器需要使用代理服务器,请参阅 使用代理服务器。
网络,容器,独立