Docker命令中的–net = host选项是干什么的?

我对Docker有点初学者。 在Docker运行命令中,我找不到任何有关此选项的明确说明。

我们可以使用它来访问运行在docker容器上的应用程序,而无需指定端口吗? 作为一个例子,如果我在Docker运行命令中使用选项-p 8080:8080运行通过8080端口上的泊坞窗图像部署的webapp,我知道我将不得不在8080端口上访问Docker容器ip / theWebAppName。 但我不能真正想到如何--net=host选项的作品。

docker安装后,默认情况下有3个networking:

 docker network ls NETWORK ID NAME DRIVER SCOPE f3be8b1ef7ce bridge bridge local fbff927877c1 host host local 023bb5940080 none null local 

我试图保持这个简单。 所以如果你默认启动一个容器,它将在桥(docker0)networking内部创build。

 $ docker run -d jenkins 1498e581cdba jenkins "/bin/tini -- /usr..." 3 minutes ago Up 3 minutes 8080/tcp, 50000/tcp friendly_bell 

在jenkins的dockerfile中,端口808050000被暴露。 这些端口在其网桥上为容器打开。 因此,桥接networking中的所有内容都可以访问端口808050000上的容器。 网桥中的所有东西都在"Subnet": "172.17.0.0/16",的私有范围内"Subnet": "172.17.0.0/16",如果你想从外部访问它们,你必须用-p 8080:8080映射端口。 这将映射您的容器的端口到您的真实服务器(主机networking)的端口。 因此,在8080上访问您的服务器将通过端口8080路由到您的网桥。

现在你也有你的主机networking。 这不包含容器networking。 因此,如果您在主机networking中启动一个容器,它将如下所示(这是第一个):

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1efd834949b2 jenkins "/bin/tini -- /usr..." 6 minutes ago Up 6 minutes eloquent_panini 1498e581cdba jenkins "/bin/tini -- /usr..." 10 minutes ago Up 10 minutes 8080/tcp, 50000/tcp friendly_bell 

不同的是港口。 您的容器现在位于您的主机networking中。 所以如果你在主机上打开端口8080 ,你将立即访问该容器。

 $ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT 

我已经在防火墙中打开了端口8080 ,当我正在端口8080访问我的服务器时,我正在访问我的jenkins。 我认为这个博客对于更好地理解它也是有用的。