Docker的host网络模式
Docker 的网络模式之一 —— host 模式。我们来解释下面这句话:
原句:
由于采用的是 host 模式,我们看不到端口映射。不过能直接在宿主机通过 ps 命令查看到 Redis 进程。
解释:
✅ “由于采用的是 host 模式”
Docker 支持多种网络模式,其中一种是 --network host,即 host 模式。
在这种模式下:
- 容器不会获得自己独立的网络命名空间。
- 容器中的应用直接使用宿主机的网络栈(包括 IP 地址和端口)。
- 所以容器内的服务监听的端口,就是宿主机上的端口,不需要端口映射(port mapping)。
✅ “我们看不到端口映射”
通常在使用 Docker 默认的 bridge 网络模式时,我们会用 -p 参数做端口映射,比如:
docker run -p 6379:6379 redis
这时可以通过 docker ps 看到端口映射信息(如 0.0.0.0:6379->6379/tcp)。
但在 host 模式下,不需要端口映射,容器直接监听宿主机端口,所以 docker ps 不会显示端口映射信息。
✅ “能直接在宿主机通过 ps 命令查看到 Redis 进程”
因为容器和宿主机共享网络栈,Redis 进程实际上是在宿主机上运行的(虽然被容器隔离了文件系统等),所以你可以用:
ps aux | grep redis
在宿主机上看到 Redis 的进程信息。
总结:
使用 host 模式时,容器共享宿主机的网络,不需要端口映射,容器内的服务直接监听宿主机端口。因此,你在 docker ps 中看不到端口映射信息,但可以直接在宿主机上通过 ps 命令看到容器内运行的进程(如 Redis)。
