在docker的网络设置有,默认有三种类型的网络,分别是bridge、host和null,如下图所示:
在启动容器时,如果不指定网络参数,则默认使用bridge网络,而另外两种类型的网络则使用的较少,而在本文中,我们将探讨这两种预定义且有些独特的网络类型,即docker主机网络和空网络。
主机网络
有时,我们希望在主机的网络命名空间中运行容器。当我们需要在容器中运行某些用于分析或调试主机网络流量的软件时,这可能是必要的,但请记住,这些都是非常特殊的情况。在容器中运行业务软件时,没有充分的理由在主机网络上运行相应的容器。出于安全考虑,强烈建议不要在生产或类似生产的环境中运行任何连接到主机网络的此类容器。
那么,如何在主机的网络命名空间内运行容器呢?只需将容器连接到主机网络即可:
docker container run --rm -it \
--network host \
alpine:latest /bin/sh
以上,通过使用—network host参数,可以使得容器的网络与宿主机一致!
在容器中使用 ip 工具分析网络命名空间。你会发现,我们得到的图像与直接在主机上运行 ip 工具时完全相同。例如,以下图片是容器内显示eth0网络的输出情况:
ip addr show eth0
以下是主机上的网络图:
在这里,我可以看到 192.168.9.40 是主机分配的 IP 地址,这里显示的 MAC 地址也与主机的 MAC 地址一致。说明,容器使用了与主机一致的网络,两个网络是相同的。
再次指出,由于潜在的安全漏洞和冲突,在主机网络上运行容器可能很危险。因此,在运行 Docker 容器时,一般建议使用用户自定义的网络而不是主机网络,因为这样可以提供更好的隔离性,降低冲突和安全漏洞的风险。关于如何使用自定义的网络,可参考我的课程:Docker 实战_在线视频教程-CSDN程序员研修院
docker空网络
有时,我们需要运行一些完全不需要任何网络连接就能执行手头任务的应用服务或作业。强烈建议您在一个连接到无网络的容器中运行这些应用程序。该容器将完全隔离,因此不会受到任何外部访问。让我们运行这样一个容器:
docker container run --rm -it \
--network none \
alpine:latest /bin/sh
如上命令,通过指定--network none便可以将容器设置为无网络的
进入容器后,我们可以验证没有可用的 eth0 网络端点:
此外,也没有可用的路由信息,我们可以使用以下命令来证明这一点:
ip route
返回为空
以上便是对docker中两种特殊的网络的讲解,希望对您有所帮助。
标签:容器,--,主机,网络,Docker,docker,运行 From: https://blog.csdn.net/abc666_666/article/details/139873522