无法访问另一个泊坞窗容器中的本地进程

我试图从PHP连接到一个RabbitMQdocker容器。 我得到的错误是Uncaught exception 'ErrorException' with message 'stream_socket_client(): php_network_getaddresses: getaddrinfo failed: Name or service not known' 。 我认为这是我如何将程序指向RabbitMQ进程的问题。

我认为导致错误的代码片段是

 $connection = new AMQPStreamConnection(getenv('MESSAGE_BROKER_HOST'), 5672, 'guest', 'guest'); 

我正在访问的环境variables在.env中定义为

 MESSAGE_BROKER_HOST=amqp://rabbitmq 

我不是很习惯docker,但是我觉得这个应该是可行的,因为这个代码运行的过程已经把docker-compose文件中的RabbitMQ链接成了“rabbitmq”。

MESSAGE_BROKER_HOST env应该是没有amqp:// rabbitmq,因为phpamqp-lib不支持DSN。

如果你想处理真正的DSN看enqueue / amqp-lib 。

代码如下所示:

 <?php use Enqueue\AmqpLib\AmqpConnectionFactory; $factory = new AmqpConnectionFactory('amqp://guest:guest@rabbitmq:5672/%2f'); 

你的方法看起来不错。 我唯一能想到的问题是guest用户权限不足。 RabbitMQ的默认guest用户只能从本地主机访问。 尽pipe权限不足不应该引发unknown service错误。

尝试创build一个新的用户可能会解决这个问题。 有关访客用户权限的详细信息,请参阅以下链接: https : //www.rabbitmq.com/access-control.html