龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > PHP > Hyperf-consul容器ping不通的情况

Hyperf-consul容器ping不通的情况

龙行    PHP    2022-10-23    215    0评论    

Hyperf-consul容器ping不通的情况

来看看今天遇到的问题

PHP Fatal error:  Uncaught GuzzleHttp\Exception\ConnectException: Connection refused in /data/project/hyperf-server/vendor/hyperf/guzzle/src/CoroutineHandler.php:77
Stack trace:
#0 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php(35): Hyperf\Guzzle\CoroutineHandler->__invoke()
#1 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/Middleware.php(31): GuzzleHttp\PrepareBodyMiddleware->__invoke()
#2 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(71): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
#3 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/Middleware.php(63): GuzzleHttp\RedirectMiddleware->__invoke()
#4 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/HandlerStack.php(75): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
#5 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/Client.php(331): GuzzleHttp\HandlerStack->__invoke()
#6 /data/project/hyperf-server/vendor/guzzlehttp/guzzle/src/Client.php(168): GuzzleHttp\Client->transfer()
# in /data/project/hyperf-server/vendor/hyperf/consul/src/Client.php on line 70

看报错非常清楚  8500连接拒绝了   问题场景:consul是一个容器,服务提供者是一个容器,consul影视开放8500端口,服务提供者9502端口

/**
* 注意,如希望通过服务中心来管理服务,需在注解内增加 publishTo 属性
* @RpcService(name="AddService", protocol="jsonrpc-http", server="jsonrpc-http",publishTo="consul")
*/

加上publishTo注册中心就报上面的错误:很明显连接拒绝

在容器里面各种ping consul8500 curl8500都没问题

查看网络组

[root@localhost ~]# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
0939f9e43698   bridge            bridge    local
jg68sh2e8jrk   default-network   overlay   swarm
5354c65d14e4   docker_gwbridge   bridge    local
c1781be3a3b5   host              host      local
5bx6olp033yg   hyperf-network              swarm
d179f23097c2   hyperf_network    bridge    local
v018djj8and5   ingress           overlay   swarm
32f9a199f4c9   none              null      local

hyperf_network是我给服务提供者消费者单独开的一个网络

再看看这个网络

docker network inspect hyperf_network
[root@localhost ~]# docker network inspect hyperf_network
[
   {
       "Name": "hyperf_network",
       "Id": "d179f23097c23e4870781facd6bb19e32ab5908241c270ed077d4f8a721642a9",
       "Created": "2022-10-22T18:42:28.460386169+08:00",
       "Scope": "local",
       "Driver": "bridge",
       "EnableIPv6": false,
       "IPAM": {
           "Driver": "default",
           "Options": {},
           "Config": [
               {
                   "Subnet": "172.19.0.0/16",
                   "Gateway": "172.19.0.1"
               }
           ]
       },
       "Internal": false,
       "Attachable": false,
       "Ingress": false,
       "ConfigFrom": {
           "Network": ""
       },
       "ConfigOnly": false,
       "Containers": {
           "0519939e3cb92e364fe9d199454b1d316ec0c84fb2f7c839a93934cf57579ca1": {
               "Name": "hyperf-server",
               "EndpointID": "08202c765af9fae304266d6ffbeb0f23e2541e451a7107141bcbfa7478109789",
               "MacAddress": "02:42:ac:13:00:03",
               "IPv4Address": "172.19.0.3/16",
               "IPv6Address": ""
           },
           "07a0aa48a6d5b0ef323e120f72198b01163c7e03cd463b18a04099b28a564175": {
               "Name": "hyperf-http",
               "EndpointID": "5a446c6f7b7c3300a6b97709e1f7ca50e0887b22ee913d9f7fbdc4118e9ec272",
               "MacAddress": "02:42:ac:13:00:02",
               "IPv4Address": "172.19.0.2/16",
               "IPv6Address": ""
           }
       },
       "Options": {},
       "Labels": {}
   }
]

网络没有consol  难道是这个原因?

不管了先加上去

[root@localhost ~]# docker network connect hyperf_network consul
//附带从网络移除命令
[root@localhost ~]# docker network disconnect hyperf_network consul

再看看

docker network inspect hyperf_network

[
   {
       "Name": "hyperf_network",
       "Id": "d179f23097c23e4870781facd6bb19e32ab5908241c270ed077d4f8a721642a9",
       "Created": "2022-10-22T18:42:28.460386169+08:00",
       "Scope": "local",
       "Driver": "bridge",
       "EnableIPv6": false,
       "IPAM": {
           "Driver": "default",
           "Options": {},
           "Config": [
               {
                   "Subnet": "172.19.0.0/16",
                   "Gateway": "172.19.0.1"
               }
           ]
       },
       "Internal": false,
       "Attachable": false,
       "Ingress": false,
       "ConfigFrom": {
           "Network": ""
       },
       "ConfigOnly": false,
       "Containers": {
           "0519939e3cb92e364fe9d199454b1d316ec0c84fb2f7c839a93934cf57579ca1": {
               "Name": "hyperf-server",
               "EndpointID": "08202c765af9fae304266d6ffbeb0f23e2541e451a7107141bcbfa7478109789",
               "MacAddress": "02:42:ac:13:00:03",
               "IPv4Address": "172.19.0.3/16",
               "IPv6Address": ""
           },
           "07a0aa48a6d5b0ef323e120f72198b01163c7e03cd463b18a04099b28a564175": {
               "Name": "hyperf-http",
               "EndpointID": "5a446c6f7b7c3300a6b97709e1f7ca50e0887b22ee913d9f7fbdc4118e9ec272",
               "MacAddress": "02:42:ac:13:00:02",
               "IPv4Address": "172.19.0.2/16",
               "IPv6Address": ""
           },
           "83e332a7635ce7c317c8233d1064830e5ef3334a9a98d66c2c58c581e39ebbce": {
               "Name": "consul",
               "EndpointID": "39214a0ee4285f966dd01fc125d061f2c493a332727885571733372b1cb4fa80",
               "MacAddress": "02:42:ac:13:00:04",
               "IPv4Address": "172.19.0.4/16",
               "IPv6Address": ""
           }
       },
       "Options": {},
       "Labels": {}
   }
]

可见,在 hyperf_network网络中,就有 consul容器了,并且给consul容器分配了一个此网络的 ip地址:172.19.0.4

结果还是一样拒绝连接

最后解决方案:

官方文档配置文件复制了衣服跟过来就没有了,应该是我配置原因

发布服务到 consul 在 Hyperf 也是非常容易的一件事情,通过 composer require hyperf/service-governance-consul 引用组件(如果已安装则可忽略该步骤),然后再在 config/autoload/services.php 配置文件内配置 drivers.consul 配置即可

<?php
return [
   'enable' => [
       'discovery' => true,
       'register' => true,
   ],
   'consumers' => [],
   'providers' => [],
   'drivers' => [
       'consul' => [
           'uri' => 'http://127.0.0.1:8500',
           'token' => '',
       ],
       'nacos' => [
           // nacos server url like https://nacos.hyperf.io, Priority is higher than host:port
           // 'url' => '',
           // The nacos host info
           'host' => '127.0.0.1',
           'port' => 8848,
           // The nacos account info
           'username' => null,
           'password' => null,
           'guzzle' => [
               'config' => null,
           ],
           'group_name' => 'api',
           'namespace_id' => 'namespace_id',
           'heartbeat' => 5,
       ],
   ],
];

再次启动解决了,

consoul 和服务提供者最好在一个网络下面 否则会报其他错误



评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/415.html
  • 上篇文章:Hyper服务消费者统一响应
  • 下篇文章:安装Composer警告提示
  • swoole hyperf
快捷导航
联系博主
在线壁纸
给我留言
四四五五
音乐欣赏
返回顶部