Docker容器为什么能够访问互联网?

时间:2019-08-13 16:39:56

标签: docker networking

我对Docker有一个基本问题,这可能是由于我对网络方面的知识不足。 Docker container networking documentation指出:

  

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

听起来,当您在计算机上安装容器而不将任何端口从容器映射到主机时,该容器将无法访问Internet。但是,例如,我使用以下命令安装Ubuntu容器:

docker pull ubuntu

然后我使用以下命令输入容器的命令行:

docker run -ti ubuntu bash

到那时,我可以运行apt-get update,容器开始从Internet提取信息,而无需映射任何端口(例如-p 80:80)。这怎么可能?

2 个答案:

答案 0 :(得分:1)

当谈论发布端口时,它们是指入站端口。

出站端口有效-取决于您的网络类型-有关更多信息,请参见此处:

https://docs.docker.com/network/

答案 1 :(得分:1)

发布端口允许docker主机外部的机器访问容器,入站连接。默认情况下,容器可以通过出站连接访问网络。

要限制容器访问网络,可以在没有网络的情况下运行容器(注意:这仍然会创建一个环回接口,以后可以将其连接到另一个网络):

docker run --net none ...

或者您可以使用--internal选项创建网络并在该网络上运行容器:

docker network create --internal internal
docker run --net internal ...

内部网络是在网桥网络上没有网关接口的情况下创建的。