2015-06-18 2 views
1

Я довольно новичок в докерах, и я узнаю о rabbitMQ. До сих пор мне удалось запустить rabbitMQ, в форме python libary pika, на моем ubuntu vm. Это работало без каких-либо проблем, но теперь я помещаю его в небольшое приложение в докере и не работает.Настройка rabbitMQ на докере с python

Проблема, кажется, в набор, и это всеми способами не удается эту строку кода:

connection = pika.BlockingConnection(pika.ConnectionParameters(
     host=HOST, port=80, credentials=credentials)) 

Переменные импортируемого:

USER = "test" 
PASS = "testpass1" 
HOST = "dockerhost" 

файл:

import pika 
from settings import USER, PASS, HOST 

def send(message): 

    message = str(message) 
    print 'trying: credentials = pika.PlainCredentials(username=USER, password=PASS)' 
    try: 
     credentials = pika.PlainCredentials(username=USER, password=PASS) 
    except Exception: 
     print 'Failed' 
     print str(Exception) 
     return 'Failed on: credentials = pika.PlainCredentials(username=USER, password=PASS) \n' + str(Exception.message) 

    print 'trying: connection = pika.BlockingConnection(pika.ConnectionParameters(host=HOST, port=80, credentials=credentials))' 
    try: 
     connection = pika.BlockingConnection(pika.ConnectionParameters(
      host=HOST, port=80, credentials=credentials)) 
    except Exception: 
     print 'Failed' 
     print str(Exception) 
     return 'Failed on: connection = pika.BlockingConnection(pika.ConnectionParameters(host=HOST, port=80, credentials=credentials)) \n' + str(Exception.message) 

    channel = connection.channel() 

    channel.queue_declare(queue='hello') 

    channel.basic_publish(exchange='', 
         routing_key='hello', 
         body=message) 
    connection.close() 

    return "Message Sent" 

Внутри этого кода он всегда терпит неудачу на линии:

connection = pika.BlockingConnection(pika.ConnectionParameters(
     host=HOST, port=80, credentials=credentials)) 

И, наконец, Dockerfile:

FROM ubuntu 
MAINTAINER Will Mayger 
RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sources.list 
RUN apt-get update 
RUN apt-get install -y tar git curl nano wget dialog net-tools build-essential 
RUN apt-get install -y python python-dev python-distribute python-pip 
RUN git clone https://github.com/CanopyCloud/microservice-python 
RUN pip install -r /microservice-python/requirements.txt 
EXPOSE 80 
WORKDIR /microservice-python/ 
CMD sudo rabbitmqctl add_user test testpass1 
CMD sudo rabbitmqctl add_vhost myvhost 
CMD sudo rabbitmqctl set_permissions -p myvhost test ".*" ".*" ".*" 
CMD sudo rabbitmq-server 

CMD python /microservice-python/server.py 

За дополнительной информацией все файлы расположены на: https://github.com/CanopyCloud/microservice-python

ответ

0

Dockerfile Ваш Интернет не является правильным.

Попробуйте вместо этого:

FROM ubuntu 
MAINTAINER Will Mayger 
RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sources.list 
RUN apt-get update 
RUN apt-get install -y tar git curl nano wget dialog net-tools build-essential 
RUN apt-get install -y python python-dev python-distribute python-pip 
RUN git clone https://github.com/CanopyCloud/microservice-python 
RUN pip install -r /microservice-python/requirements.txt 
EXPOSE 80 
WORKDIR /microservice-python/ 
RUN sudo rabbitmqctl add_user test testpass1 
RUN sudo rabbitmqctl add_vhost myvhost 
RUN sudo rabbitmqctl set_permissions -p myvhost test ".*" ".*" ".*" 
RUN sudo rabbitmq-server 

CMD python /microservice-python/server.py 

Причина, по которой/не было правильным потому, что вы были defning мультипликатор CMD (ы) в вашем Dockerfile. Я уверен, что докер будет устанавливать только последнюю команду в полученном изображении, а CMD не «запускает» вещи как часть процесса сборки изображения; RUN.

CMD Задаёт «команда», что образ работает как часть docker run <image>


Также вы, кажется, в сочетании RabbitMQ и приложение Python в один Docker Image/контейнер; который на самом деле не лучший вещь здесь.

Вы должны вместо этого разделить это на два изображения.

  • RabbitMQ Image/Контейнер
  • Ваше приложение Image/контейнер

И использовать "Docker Links" через docker run --link связать контейнеры вместе.


Вы можете построить изображение для вашего Python АРР довольно легко, используя что-то вроде этого, как отдельный Dockerfile для вашего Python App:

FROM python:2.7-onbuild 

RUN pip install -r requirements.txt 

ADD server.py /app 

WORKDIR /app 
CMD ["python", "./server.py"] 
+0

Благодаря это действительно полезно, и я дам вам знаю, если он работал после того, как я его реализую :) –

Смежные вопросы