【问题标题】:Rabbitmq IP address and Redis IP address in DockerDocker中的Rabbitmq IP地址和Redis IP地址
【发布时间】:2017-10-13 14:54:47
【问题描述】:

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

在我的 Django settings.py 中,我必须说明 redis 和 rabbitmq 的 IP 地址,以便在我的应用程序中连接到它们。我不知道如何在 Docker 中确定他们的 IP 地址。在 docker-compose.yml 中,配置如下:

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 设置为 'localhost' 时,会发生错误

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 redis rabbitmq


    【解决方案1】:

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

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

    此外,对于您的 web 服务,您应该指定此 Web 应用程序 depends on rabbitredis。这将确保rabbitredisweb 之前启动。根据您的错误,Web 启动时 RabbitMQ 可能尚未完全启动。

    depends_on: 
      - rabbit
      - redis
    

    【讨论】:

    • 我试过了,还是不行。在进一步的研究中,我仍然在我的 docker-compose.yml 中包括 healthcheck: test: ["CMD", "curl", "-f", "172.17.0.3:15672"] interval: 30s timeout: 10s retries: 5 。知道吗?
    • 愚蠢的问题,但是您在更改 docker-compose.yml 之前是否在运行 docker-compose down
    • 我实际上ctrl+c 终止docker-compose up 并在编辑docker-compose.yml 后执行docker-compose build。可以吗?
    • 我会尝试运行docker-compose down,然后再次运行docker-compose up -d-d 在后台运行它,因此您不必使用 CTRL-C 来停止容器。您应该始终运行 docker-compose down 来停止操作,因为 CTRL-C 不会完全清理。
    • 不带 -d 运行现在很好,我可以看到我的 webapp 显示的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2021-10-06
    • 1970-01-01
    • 2021-04-17
    • 2019-03-09
    • 2014-05-08
    相关资源
    最近更新 更多