老师,在看视频之前,可以先问个问题吗?
来源:1-2 项目环境搭建

他门说这就是人生
2020-02-07
我在学习微服务时,搭建的基于普通spring cloud的权限系统,有个单点登录功能。权限系统在9000端口,登录界面在8002端口。访问localhost:9000,会跳转到8002去登录。有时跳转到localhost:8002(正确的情况),但还有时跳转到——{主机名}:8002,不知道是什么原因。部署在docker里时,会跳转到——{docker容器ID}:8002。导致无法访问页面,能帮我估计一下是怎么回事吗?我实在找不出原因了。
我用到的组件有eureka server, discovery client, config server, feign client(整合了ribbon的方式), 权限系统和单点登录用的spring security。
这很影响我学习微服务,这个问题没有解决,我都不敢用微服务来工作,因为公司没有大牛了。
1回答
-
您好,这个问题其实是一个Docker的入门问题。
Docker容器默认使用的是bridge网络模式,这意味着每个容器都有自己独立的网卡。宿主机和容器之间通过docker0网桥连接(macOS除外,macOS由于系统限制没有docker0网桥,但也有办法解决就是了,这个无需过分关注)。桥接模式,如果不了解的话,可以认为你创建了一台虚拟的独立的机器,它有自己的IP、主机名(容器id就是主机名)、网关等。
所以,你上面
部署在docker里时,会跳转到——{docker容器ID}:8002
是一个正常的现象。要想解决的话,也比较简单,下面给出两点解决方案:
把容器网络模式修改为host模式(具体可以百度一下)。host模式指的是容器直接用宿主机网卡。这样,容器就会直接使用宿主机的网卡,而不是容器自己的桥接网卡了。从而就能解决你的问题。
人为在宿主机上添加一个主机名映射,把主机名映射到容器IP,例如:你的容器id是abc123,那么就添加一条主机名(/etc/hosts里面添加) ,同时,还需要配置端口映射。这样,当你访问容器id:8002时,就相当于访问了127.0.0.1:8002,而你又配置了端口映射。所以就会正常映射到容器里面去。
127.0.0.1 abc123
142020-02-18
相似问题