我刚开始学习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.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"]
答案 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)。