Docker宿主机访问Docker容器中的服务,通过localhost或127.0.0.1不行

wzwdev1980 2017-11-21 06:01:58
实验环境:
宿主机:192.168.0.1
容器:tomcat 做端口映射 8080->8080

在局域网192.168.0.2中可以通过http://192.168.0.1:8080 访问tomcat服务,而在 宿主机:192.168.0.1通过http://localhost:8080或http://127.0.0.1:8080却不能访问tomcat服务

怎么处理!
...全文
1671 3 收藏 8
写回复
8 条回复
阿翔是我了 01月05日
其实最近刚好有看虚拟机的网络,以前是实操发现的。现在也可以解释一下原理了。docker的默认网络模型是桥接模型,而且和虚拟机(VMware那种)的桥接模型不一样,它相当于是虚拟机的桥接模型+NAT模型构成的一个网络模型(对于这两种模型可以看看我的博客,最近有写,也可以直接百度:1.虚拟机网络模型;2.docker网络模型,你就知道为什么了)。 它也是用了虚拟机网络模拟那一套。大概原因是:docker内部模拟了一个网卡,类似虚拟机的桥接模式,所以,在宿主机内访问docker容器,实际上是相当于访问了一个局域网内的另一台机器,所以localhost是找不到了,要用docker的虚拟网关分配给容器的ip才可以访问。即:在宿主机中,相当于各个docker容器和宿主机是一个局域网内的多台机器。 可以参考: docker网络模型:https://blog.csdn.net/qq_43570369/article/details/91504306?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-2&spm=1001.2101.3001.4242 虚拟机的桥接模型和NAT模型:https://blog.csdn.net/qq_43570369/article/details/91504306?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-2&spm=1001.2101.3001.4242
回复 点赞
阿翔是我了 01月05日
引用 6 楼 jiayuanhuiyuan 的回复:
[quote=引用 5 楼 樱木翔 的回复:]这个问题有点奇怪,我都忘了当时怎么搞的了。记得是存在这个问题的,我确实也是用容器内的ip+端口实现访问的
同意你,你这种应该也是可以访问到的[/quote] 哈哈哈。隔了两个月,怎么想法变了
回复 点赞
jiayuanhuiyuan 2020年12月30日
引用 5 楼 樱木翔 的回复:
这个问题有点奇怪,我都忘了当时怎么搞的了。记得是存在这个问题的,我确实也是用容器内的ip+端口实现访问的
同意你,你这种应该也是可以访问到的
回复 点赞
阿翔是我了 2020年10月29日
这个问题有点奇怪,我都忘了当时怎么搞的了。记得是存在这个问题的,我确实也是用容器内的ip+端口实现访问的
回复 点赞
jiayuanhuiyuan 2020年10月29日
引用 3 楼 樱木翔 的回复:
linux环境主机的localhost不是127.0.0.1了。所以访问不了,查看docker启动的容器的ip,一般是192.160.99.100+端口,就可以访问了。
我觉得你讲的原因和楼上不一致。他的似乎更正确哦大家怎么看?
回复 点赞
阿翔是我了 2019年07月18日
linux环境主机的localhost不是127.0.0.1了。所以访问不了,查看docker启动的容器的ip,一般是192.160.99.100+端口,就可以访问了。
回复 点赞
tianfang 2017年12月20日
docker直接跑在宿主机上啊 为什么要端口映射
回复 点赞
tianfang 2017年12月20日
容器:tomcat 做端口映射 8080->8080 端口映射服务 监听的是192.168.0.1的8080,而不是127.0.0.1的8080,所以访问不到docker主机上
回复 点赞
发动态
发帖子
Java EE
创建于2007-09-28

3.7w+

社区成员

22.5w+

社区内容

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区公告
暂无公告