无法访问另一个docker容器中的本地进程

时间:2017-08-20 10:41:38

标签: php docker docker-compose dockerfile

我正在尝试从PHP连接到RabbitMQ docker容器。 我得到的错误是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');

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

MESSAGE_BROKER_HOST=amqp://rabbitmq

我不习惯停泊,但我觉得这应该有效,因为运行此代码的过程将RabbitMQ在docker-compose文件中链接为“rabbitmq”。

2 个答案:

答案 0 :(得分:1)

MESSAGE_BROKER_HOST env应为rabbitmq而不amqp://,因为phpamqp-lib不支持DSN。

如果您想处理真实的DSN,请查看enqueue/amqp-lib

代码如下:

<?php
use Enqueue\AmqpLib\AmqpConnectionFactory;

$factory = new AmqpConnectionFactory('amqp://guest:guest@rabbitmq:5672/%2f');

答案 1 :(得分:0)

你的方法看起来很好。我能想到的唯一问题是guest用户的权限不足。 RabbitMQ的默认guest用户只能从localhost访问。虽然权限不足不应该抛出unknown service错误。

尝试创建新用户可能会解决问题。 有关来宾用户权限的详细信息,您可以看到以下链接: https://www.rabbitmq.com/access-control.html