在docker容器中访问宿主机端口有时候会显示连接失败。
宿主机明明有8080的服务,容器内确访问不到。
localhost:8080
Docker有四种网络模式
- host模式
容器和宿主机共享network,这时候localhost就可以访问宿主机端口了。
docker run -d --network host --name nginx
容器A和容器B共享network,就是说容器之间可以通过localhost直接访问。
docker run -d --network container --name nginx
- none模式
容器与宿主机隔绝,不能联网,安全性最高,一般很少用到。
docker run -d --network none --name nginx
- bridge模式(默认模式)
每个容器有自己的network,通过localhost访问不到宿主机。
docker run -d --name nginx
此种模式下的容器通信总结一下:
- 如果宿主机有一个公网IP,那么同一个IP下的容器在访问宿主机的其他容器时应当使用虚拟子网的IP地址而不是公网IP,否则将造成路由错误
- 两个有相同公网IP的不同物理机,在同一个局域网应当使用局域网地址而不是公网IP,否则将造成路由错误
再补充一下如何查看docker的虚拟子网:
- 使用docker network list列出所有的虚拟子网
- 使用docker network inspect (bridge) 查看虚拟子网下面的容器和其IP