1

我刚开始学习 RabbitMQ 和 Docker/Fig。我有一个非常简单的示例,其中包含 3 个无花果容器,每个用于 Rabbit 服务器、生产者和消费者。在/etc/hosts我已将 my 设置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

但是,当我fig up -d在 RabbitMQ 生产者上运行时,我收到一个连接错误:

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

上述更改使一切正常工作。

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

更新

这是我的 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"]
4

1 回答 1

1

当您使用 fig 时,我建议您通过创建 1 个唯一fig.yml文件并链接容器以便它们进行通信来使用 fig 的真正力量。因此,您将编辑当前的 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,那么您可以通过以下方式编辑 rabbitworker 链接fig.yml

    links: 
       - rabbit:dockerhost

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

于 2015-03-27T15:26:27.240 回答