Docker中的Rabbitmq IP地址和Redis IP地址

在Docker之外,redis和rabbitmq的ip地址在我的django应用程序中的ubuntu 16.04环境中设置为'localhost'。 但是,我正在尝试将我的Web服务迁移到docker中。 我使用Docker的官方存储库redis和rabbitmq。

在我的Django settings.py ,我必须声明redis和rabbitmq的IP地址,以便在我的应用程序中连接到它们。 我没有任何线索如何确定他们在Docker内的IP地址。 在docker-compose.yml中,configuration如下:

 version: '2' services: # RabbitMQ rabbit: hostname: my-rabbit image: rabbitmq:3 ports: - "5672:5672" # we forward this port because it's useful for debugging - "15672:15672" # here, we can access rabbitmq management plugin #Redis redis: image: redis:latest #Data Processing WS web: build: . command: python manage.py runserver 0.0.0.0:9060 --noreload volumes: - .:/srv ports: - "9060:9060" links: ["rabbit", "redis"] 

当我尝试将其IP设置为“本地主机”时,发生错误

 settings.CONNECTION = pika.BlockingConnection(pika.ConnectionParameters(host=settings.RABBIT_MQ_ IP_ADDRESS, heartbeat_interval=0)) web_1 | File "/usr/local/lib/python2.7/dist- packages/pika/adapters/blocking_connection.py", line 339, in __init__ web_1 | self._process_io_for_connection_setup() web_1 | File "/usr/local/lib/python2.7/dist- packages/pika/adapters/blocking_connection.py", line 374, in _process_io_for_connection_setup web_1 | self._open_error_result.is_ready) web_1 | File "/usr/local/lib/python2.7/dist- packages/pika/adapters/blocking_connection.py", line 395, in _flush_output web_1 | raise exceptions.ConnectionClosed() web_1 | pika.exceptions.ConnectionClosed 

在你docker-compose.yml你有my-rabbit作为主机名,但在你的links部分,你有rabbit 。 这些需要匹配。

尝试将您的RabbitMQ主机名更改为rabbit

另外,对于您的web服务,您应该指定此Web应用程序依赖于 rabbitredis 。 这将确保在web之前启动rabbitredis 。 根据你的错误,RabbitMQ在networking启动时可能没有完全启动。

 depends_on: - rabbit - redis