12.docker的网络-host模式

1.docker的host网络模式简介

host模式下,容器将不会虚拟出自己的网卡、配置IP等,而是使用宿主机的IP和端口;也就说,宿主机的就是我的。

2. 以host网络模式创建容器

2.1 创建容器

我们仍然以tomcat这个镜像来说明一下。我们以host模式启动一个容器t3:

docker run -d --network host -p 8081:8080  --name t3 donkey/tomcat8:1.0.0

在这里插入图片描述

2.2 创建容器过程中的问题

这里我们看到两个问题:
1.容器启动完成后,打印的信息中有个警告信息:WARNING: Published ports are discarded when using host network mode
2.docker ps查看容器,我们指定了端口映射,但是显示出来的信息却没有。

2.3 问题的分析与解释

为了解释这个问题,我们再启动一个容器t4,t4我们仍然使用host网络模式,但是我们不指定端口映射:

docker run -d --network host --name t4 donkey/tomcat8:1.0.0

在这里插入图片描述
这时我们发现容器创建过程中并没有出现警告信息。为什么呢?我们看host模式下,它不仅ip都使用宿主机,就连端口也使用宿主机的的。所以就不需要再设置端口映射了,我们容器暴露的端口是什么,那么就是什么端口。这里我们t3容器暴露的端口是8080,所以我们直接就能用http://127.0.0.1:8080访问。
那现在又有一个问题,我们启动了t3和t4两个容器,由于来自同一个镜像,那么容器暴露的端口就都是8080,是一样的,这怎么办呢?
我们看下容器t4的日志:

docker logs t4

12.docker的网络-host模式_第1张图片
12.docker的网络-host模式_第2张图片
非常不幸,tomcat服务启动失败了,端口被占用了。

3. 以host网络模式下,容器和宿主机网络情况

3.1 大胆猜测

我认为宿主机和容器的网络情况是一模一样的。

3.2 宿主机的网络情况

12.docker的网络-host模式_第3张图片
没有看到之前成对出现的网卡,只有一个docker0和宿主机本身的网络信息。

3.3 容器的网络情况

ker exec -it t4 /bin/bash		

12.docker的网络-host模式_第4张图片

3.4 结论

不出所料,宿主机和容器的网路情况是一样的。

你可能感兴趣的:(Docker,docker网络host模式)