2017-10-13 4 views
0

En dehors de Docker, l'adresse IP de redis et rabbitmq est définie comme 'localhost' dans mon application django dans l'environnement Ubuntu 16.04. Cependant, j'essaie de migrer mon service web vers docker. J'utilise le référentiel officiel de Docker redis et rabbitmq.Adresse IP Rabbitmq et adresse IP Redis dans Docker

Dans mon Django settings.py, je dois indiquer les adresses IP de redis et rabbitmq afin de me connecter à eux dans mon application. Je n'ai aucune idée comment déterminer leur adresse IP dans Docker. Dans docker-compose.yml, la configuration est indiqué ci-dessous:

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"] 

Lorsque je tente de définir leur ip comme 'localhost', l'erreur se produit

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 

Répondre

0

Dans votre docker-compose.yml vous avez my-rabbit comme le nom d'hôte , mais dans votre section links, vous avez rabbit. Ceux-ci doivent correspondre.

Essayez de modifier votre nom d'hôte RabbitMQ en rabbit.

En outre, pour votre service web, vous devez spécifier que cette application Web depends onrabbit et redis. Cela garantira que rabbit et redis sont démarrés avant web. En fonction de votre erreur, RabbitMQ n'a peut-être pas démarré complètement lorsque le Web a démarré.

depends_on: 
    - rabbit 
    - redis 
+0

J'ai essayé et cela ne fonctionne toujours pas. Dans des recherches plus approfondies, j'inclus toujours healthcheck: test: ["CMD", "curl", "-f", "http://172.17.0.3:15672"] intervalle: 30s délai: 10s tentatives: 5 dans mon docker-compose.yml. Une idée? –

+0

Question idiote, mais exécutez-vous 'docker-compose down' avant d'apporter des modifications à' docker-compose.yml'? – grizzthedj

+0

En fait 'ctrl + c' pour terminer' docker-compose up' et effectuer 'docker-composer build' après avoir édité le' docker-compose.yml'. Est-ce que ça va? –