我对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
)。这怎么可能?
答案 0 :(得分:1)
答案 1 :(得分:1)
发布端口允许docker主机外部的机器访问容器,入站连接。默认情况下,容器可以通过出站连接访问网络。
要限制容器访问网络,可以在没有网络的情况下运行容器(注意:这仍然会创建一个环回接口,以后可以将其连接到另一个网络):
docker run --net none ...
或者您可以使用--internal
选项创建网络并在该网络上运行容器:
docker network create --internal internal
docker run --net internal ...
内部网络是在网桥网络上没有网关接口的情况下创建的。