Docker / Boot2Docker / Fig + RabbitMQ主机问题; pika.exceptions.AMQPConnectionError:[Errno -2]名称或服务未知

时间:2015-03-26 16:57:30

标签: docker rabbitmq boot2docker fig

我刚开始学习RabbitMQ和Docker / Fig。我有一个非常简单的例子,有3个无花果容器,分别用于Rabbit Server,Producer和Consumer。在/etc/hosts我已将boot2docker ip设为别名dockerhost

/etc/hosts
192.168.59.103    dockerhost

当我fig up -d RabbitMQ服务器时,一切正常;我可以打开浏览器并转到dockerhost:PORTNUM并访问RabbitMQ控制面板。

在我的RabbitMQ制作人中,我已将连接主机设置为dockerhost

/producer.py
connection = pika.BlockingConnection(pika.ConnectionParameters(
    host=config['RabbitMQ']['hostname'],
    ...
    ))

我的配置文件如下所示:

/config.ini
[RabbitMQ]
hostname    = dockerhost

然而,当我在RabbitMQ生成器上运行fig up -d时,我收到一个连接错误:

rabbitworker_1 |   File "/usr/local/lib/python3.4/site-packages/pika/adapters/blocking_connection.py", line 301, in _adapter_connect
rabbitworker_1 |     raise exceptions.AMQPConnectionError(error)
rabbitworker_1 | pika.exceptions.AMQPConnectionError: [Errno -2] Name or service not known`

我可以通过将boot2docker ip直接输入RabbitMQ主机名而不是dockerhost别名来使RabbitMQ生产者正常工作:

/config.ini
[RabbitMQ]
hostname    = 192.168.59.103

上述变化使一切正常。

我的问题是如何使用hostname = dockerhost而不是输入实际的IP地址来使RabbitMQ生产者工作?

更新

这是我的RabbitMQ服务器fig.yml,它与dockerhost

一起使用
rabbit:
    image: mikaelhg/docker-rabbitmq
    ports:
     - "5672:5672"
     - "15672:15672"

这是我的RabbitMQ制作人fig.ymlDockerfile,它不适用于dockerhost

/fig.yml
rabbitworker:
    build: .
    volumes:
     - .:/opt/worker
     - ./log:/var/log
    command: supervisord -n

/Dockerfile
FROM python3-rabbit-producer

COPY . /opt/worker
WORKDIR /opt/worker

RUN pip3.4 install -r requirements.txt

CMD ["supervisord", "-n"]

1 个答案:

答案 0 :(得分:1)

当你使用无花果时,我建议你通过创建一个独特的fig.yml文件来使用无花果的真正力量,并链接容器以便它们进行通信。因此,您将编辑当前的RabbitMQ生成器fig.yml,以便获得:

rabbit:
    image: mikaelhg/docker-rabbitmq
    ports:
     - "5672:5672"
     - "15672:15672”

rabbitworker:
    build: .
    volumes:
     - .:/opt/worker
     - ./log:/var/log
    links: 
       - rabbit
    command: supervisord -n

然后编辑配置文件以获取:

/config.ini
[RabbitMQ]
hostname    = rabbit

如果您确实希望保持配置文件不变并使用dockerhost,那么您可以通过以下方式编辑fig.yml中的rabbitworker链接:

    links: 
       - rabbit:dockerhost

但您必须知道dockerhost将解析为您的RabbitMQ服务器容器IP(而不是您的主机IP)。