你的两个容器都在各自独立的网络中, api 的容器是访问不了身份授权验证服务容器的.
1 、可以将他们一起写在docker-compose.yml 中,这样可以相互访问.(因为在同一个网络环境内)
2 、 docekr run 加上--network 参数将他们放同一个网络环境中
docker 文档
也不是,可以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
而且他们是部署在一个虚拟机的
e726898f72d3 这个容器 IP是172.17.0.2 吧? 你搞反了.
你的API容器是怎么访问 身份授权验证服务容器.
建议你用docker-compose.yml 将他们写在一起,这样可以通过service名去访问,还无需在意ip的变化
@xiaobaiskill: 好吧,其实我再尝试开通防火墙端口然后再看看来着
@洛晨随风: 不要把docker 当成虚拟机. 无需在意防火墙!
@xiaobaiskill: 嗯,好的,那我试试docker-compose.yml的方式先
我的API 是在虚拟机外的个人机器上用postman访问授权服务,获得token后再放在验证头部去访问的API接口啊,授权服务是identityserver4,另外看了一下docker-compose这东西,好像和多写两个启动命令没什么不一样吧。似乎不能真正解决问题。。。我试过了--link和--network的方式,可以ping通IP,就是telnet不了端口,我还是觉得和这个有关系。
问题解决了,果然是端口的问题,在宿主机开启一下8080 和8081这两个端口就可以了,
@洛晨随风: 没做端口映射?
@xiaobaiskill:
没做防火墙打通宿主机的端口,,现在应该类似这样的流程
@洛晨随风: 容器的端口可以通过-p 参数将容器内的端口映射到虚拟机,然后你的虚拟机开放对应的端口就可以了
@洛晨随风: 自己本地玩的话,其实可以将虚拟机的防火墙关闭
@xiaobaiskill: 是的,但是关键就坏在我以为我虚拟机的端口开放给外部了,但是实际上并没有,,我之所以认为是开放出去了,是因为我的本地电脑可以访问虚拟机部署的web,也是奇怪,之前防火墙不开端口的时候本地电脑是访问不到虚拟机部署的web的,这次不开居然可以用浏览器访问。。。。。百思不得其解
@xiaobaiskill: 我是模拟一下工作环境所以没关
@洛晨随风: 嗯,加油, 多用用docker-compose , 这个比较常用
@xiaobaiskill: 哈哈 ,有机会再用吧,转前端了。。。
@洛晨随风: 哦,厉害哦!
@xiaobaiskill: 大环境不好,干啥都难,不厉害,不厉害,哈哈
两个容器间能够通信吗
可以的
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
就这样了