【发布时间】:2015-03-26 16:57:29
【问题描述】:
我刚开始学习 RabbitMQ 和 Docker/Fig。我有一个非常简单的示例,其中包含 3 个无花果容器,每个用于 Rabbit 服务器、生产者和消费者。在/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`
我可以通过在 RabbitMQ 主机名中直接输入 boot2docker ip 而不是 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.yml 和 Dockerfile 不适用于 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"]
【问题讨论】:
-
正常情况下它不适用于
dockerhost,因为您的容器无权访问您的主机文件。请提供您的fig.yml文件好吗? -
@CélineAussourd 我已经用与
dockerhost一起使用的RabbitMQ 服务器的fig.yml以及不适用于@987654349 的RabbitMQ 生产者的fig.yml和Dockerhost更新了我的问题@。如果用dockerhost不工作是正常的,为什么RabbitMQ服务器容器可以和dockerhost一起工作? -
它在您的浏览器中运行,对吧?如果您进入您的容器并尝试访问 dockerhost:PORTNUM 我预计它将无法工作,因为容器无法解析
dockerhost -
顺便说一句,如果你使用卷为
/opt/worker,那么你不需要在你的Dockerfile中复制/opt/worker(除非我错过了什么)
标签: docker rabbitmq boot2docker fig