Docker网络主机

119 阅读3分钟

Docker network host

Docker网络主机的介绍

Docker网络主机是Docker中使用的默认网络驱动,当我们不想将容器的网络与主机隔离时,这意味着容器将共享主机的网络命名空间。在这种网络模式下,没有对容器进行IP地址分配。在这种模式下,端口映射选项如"-p"、"-publish"、"-P "和"-publish-all "被忽略,这意味着我们不能为容器发布任何端口,或者换句话说,在使用主机网络模式时,发布的端口会被Docker守护进程丢弃。

语法。

$docker run -d --network host --name my_con nginx:alpine

Docker network host output 1

如何在docker中使用网络主机?

我们必须使用'-network'选项并指定'host'作为参数,以便在运行容器时使用主机网络驱动程序。正如我们现在所知道的,在使用主机网络驱动时,容器不会得到任何IP地址的分配,这意味着如果我们将80端口绑定到一个正在运行的容器上,并且该容器正在使用主机网络,那么在容器内运行的应用程序在主机的IP地址上的80端口是可用的,这也意味着我们不能将相同的端口绑定到两个不同的容器。主机网络模式被用来优化性能,因为它不需要网络地址转换。这个驱动只适用于Linux主机,Docker Desktop for Mac、Docker Desktop for Windows或Docker EE for Windows Server不支持它。

我们也可以将这种网络模式用于swarm服务;但是,它包括一些额外的限制;例如,如果我们将一个服务容器绑定到80端口,那么Docker daemon只能在给定的swarm模式下运行一个服务容器。

例子

让我们通过几个例子来了解它: -

例子#1

要在Docker中列出主机网络,我们可以使用下面的命令: -

$docker network ls --filter driver=host

Docker network host output 2

**解释一下。**在上面的快照中,我们可以看到,我们有一个名为 "host "的主机网络。

例子 #2

我们必须使用下面的命令来连接运行中的主机网络和容器: -

$docker run -d --network host --name my_con nginx:alpine

Docker network host output 3

解释一下。 在上面的例子中,我们用'nginx:alpine'Docker镜像创建了一个名为'my_con'的容器,并使用了主机网络。

例子#3

让我们试着用下面的命令创建一个新的主机网络,看看会发生什么。

$docker network create host2 --driver=host

output 4

解释一下。 在上面的例子中,我们试图创建一个名为 "host2 "的主机网络;但是,由于我们只能在本地创建一个主机网络,所以它没有成功。

方案。创 建一个nginx容器,并尝试在不暴露端口的情况下从外部访问它。

**步骤1:**首先,让我们使用Docker镜像创建一个名为 "nginx:alpine "的容器,如下所示。

$docker run -d --network host --name my_nginx nginx:alpine

output 5

解释一下。 在上面的例子中,我们已经创建了一个容器 "my_nginx",并连接了主机网络。

**第二步:**让我们尝试从本地主机访问80端口的nginx。

$curlhttp://localhost:80

output 6

解释一下。 在上面的快照中,我们可以看到nginx服务器很容易在本地访问80端口,而不需要从主机向容器暴露任何端口。这是因为主机的网络是直接与容器共享的。

**第3步:**现在,让我们再创建一个nginx容器,看看是否可以这样做。

$docker run -d --network host --name my_nginx2 nginx:alpine

output 7

**解释一下。**在上面的快照中,我们试图创建另一个名为 "my_nginx2 "的容器;但是,如果我们检查容器的状态,它处于退出状态,如下图所示: -

output 8

让我们检查一下日志以了解原因。所以,在下面的快照中,它说,"地址正在使用中",因为80端口被一个已经运行的容器使用了。

output 9

**注意:**在使用主机网络模式时,我们不能运行一个以上的监听在同一端口的容器;但是,我们可以运行一个监听在不同端口的容器。

优点

  1. 它对提高容器的性能很有用,因为它绕过了网络地址转换。
  2. 我们也可以在Docker swarm中使用这个网络,方法是在'docker service create'中传递选项'-network host'。
  3. 如果我们要运行一个需要处理大量端口的容器,因为'userland-proxy'不会为每个端口创建。

总结

Docker主机网络是一个消除容器和主机之间隔离的驱动。什么时候根据需要使用这个网络,取决于我们。还有其他的网络驱动,比如桥接,覆盖,macvlan,以及没有。

推荐文章

这是一份关于Docker网络主机的指南。在这里,我们讨论了如何在Docker中使用网络主机,并列举了一些例子。你也可以看看下面的文章来了解更多----。

  1. Docker系统剪枝
  2. Docker Volume
  3. Docker推送
  4. Docker Stop Container

The postDocker network hostappeared first onEDUCBA.