首页 新闻 搜索 专区 学院

docker 部署的API如何通过docker部署的identityserver服务器不再返回401

0
悬赏园豆:30 [已解决问题] 解决于 2020-01-17 11:39

我部署了两个容器,一个是API,一个是身份授权验证服务,两个都在本地的时候可以通过授权TOKEN加入到authorize头部验证去获取API的返回结果,授权服务验证放在虚拟机上部署成容器启动后本地的API也可以获取token验证成功返回数据,但是授权服务和API都部署在虚拟机的docker以后,获取token放入api的头部进行调用接口的时候就会返回401,这个有没有大佬遇见过,不知道该怎么处理

洛晨随风的主页 洛晨随风 | 初学一级 | 园豆:108
提问于:2020-01-16 16:45
< >
分享
最佳答案
0

你的两个容器都在各自独立的网络中, api 的容器是访问不了身份授权验证服务容器的.

1 、可以将他们一起写在docker-compose.yml 中,这样可以相互访问.(因为在同一个网络环境内)
2 、 docekr run 加上--network 参数将他们放同一个网络环境中
docker 文档

收获园豆:30
xiaobaiskill | 小虾三级 |园豆:1207 | 2020-01-16 20:53

也不是,可以ping通的,但是telnet的话就这样了
root@e726898f72d3:/app# telnet 172.17.0.2 8080
Trying 172.17.0.2...
telnet: Unable to connect to remote host: Connection refused

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 09:41

而且他们是部署在一个虚拟机的

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 09:42

e726898f72d3 这个容器 IP是172.17.0.2 吧? 你搞反了.
你的API容器是怎么访问 身份授权验证服务容器.

建议你用docker-compose.yml 将他们写在一起,这样可以通过service名去访问,还无需在意ip的变化

xiaobaiskill | 园豆:1207 (小虾三级) | 2020-01-17 10:11

@xiaobaiskill: 好吧,其实我再尝试开通防火墙端口然后再看看来着

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 10:14

@洛晨随风: 不要把docker 当成虚拟机. 无需在意防火墙!

xiaobaiskill | 园豆:1207 (小虾三级) | 2020-01-17 10:17

@xiaobaiskill: 嗯,好的,那我试试docker-compose.yml的方式先

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 10:18

我的API 是在虚拟机外的个人机器上用postman访问授权服务,获得token后再放在验证头部去访问的API接口啊,授权服务是identityserver4,另外看了一下docker-compose这东西,好像和多写两个启动命令没什么不一样吧。似乎不能真正解决问题。。。我试过了--link和--network的方式,可以ping通IP,就是telnet不了端口,我还是觉得和这个有关系。

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 11:26

问题解决了,果然是端口的问题,在宿主机开启一下8080 和8081这两个端口就可以了,

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 11:39

@洛晨随风: 没做端口映射?

xiaobaiskill | 园豆:1207 (小虾三级) | 2020-01-17 13:15

@xiaobaiskill:

没做防火墙打通宿主机的端口,,现在应该类似这样的流程

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 13:53

@洛晨随风: 容器的端口可以通过-p 参数将容器内的端口映射到虚拟机,然后你的虚拟机开放对应的端口就可以了

xiaobaiskill | 园豆:1207 (小虾三级) | 2020-01-17 14:36

@洛晨随风: 自己本地玩的话,其实可以将虚拟机的防火墙关闭

xiaobaiskill | 园豆:1207 (小虾三级) | 2020-01-17 14:38

@xiaobaiskill: 是的,但是关键就坏在我以为我虚拟机的端口开放给外部了,但是实际上并没有,,我之所以认为是开放出去了,是因为我的本地电脑可以访问虚拟机部署的web,也是奇怪,之前防火墙不开端口的时候本地电脑是访问不到虚拟机部署的web的,这次不开居然可以用浏览器访问。。。。。百思不得其解

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 14:39

@xiaobaiskill: 我是模拟一下工作环境所以没关

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 14:39

@洛晨随风: 嗯,加油, 多用用docker-compose , 这个比较常用

xiaobaiskill | 园豆:1207 (小虾三级) | 2020-01-17 14:44

@xiaobaiskill: 哈哈 ,有机会再用吧,转前端了。。。

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 14:44

@洛晨随风: 哦,厉害哦!

xiaobaiskill | 园豆:1207 (小虾三级) | 2020-01-17 14:47

@xiaobaiskill: 大环境不好,干啥都难,不厉害,不厉害,哈哈

洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 14:48
其他回答(1)
0

两个容器间能够通信吗

不知道风往哪儿吹 | 园豆:653 (小虾三级) | 2020-01-17 09:28

可以的

支持(0) 反对(0) xiaobaiskill | 园豆:1207 (小虾三级) | 2020-01-17 09:34

ping是可以的,两个docker部署在一个机器上的,这个是不是要telnet通才行啊,如果是telnet-p映射的那个接口的话root@e726898f72d3:/app# telnet 172.17.0.2 8080
Trying 172.17.0.2...
telnet: Unable to connect to remote host: Connection refused
就这样了

支持(0) 反对(0) 洛晨随风 | 园豆:108 (初学一级) | 2020-01-17 09:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册