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中,端口8080
和50000
被暴露。 这些端口在其网桥上为容器打开。 因此,桥接networking中的所有内容都可以访问端口8080
和50000
上的容器。 网桥中的所有东西都在"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。 我认为这个博客对于更好地理解它也是有用的。
- 在docker-compose文件中覆盖图像版本
- manage.py collectstatic:error:无法识别的参数: – 由Docker启动的shell脚本中的–noinput
- Dockerfile:无法使用添加将本地文件映射到容器
- 来自外部机器的Docker Remote Api不响应
- 更改存储驱动程序后删除devicemapper
- 重新安装Boot2Docker由于明显的VirtualBox运行失败 – 如何closures它们?
- zsh:找不到命令:dcos
- Docker – 没有路由到主机
- 使用Individual Docker Image部署为Azure Web应用程序,从Python连接到Blob存储