2016-08-25 1 views
0

Я хочу протестировать изображение докеров, выполняющее сценарий python, подписавшийся на очередь rabbitmq. У меня есть rabbitmq, работающий на моей локальной машине, и вы хотите протестировать контейнер докеров, работающий на том же компьютере, и подписаться на локальный сервер rabbimq.Доступ к rabbitmq, выполняющийся на локальной машине из контейнера-докера

Я хочу, чтобы сценарий читал переменные среды «QUEUE_IP», установленные в команде запуска docker.

Питон скрипт:

#!/usr/bin/env python 
import pika 

host = os.environ.get('QUEUE_IP') 

connection = pika.BlockingConnection(pika.ConnectionParameters(
    host=host)) 

channel = connection.channel() 

channel.queue_declare(queue='hello') 

def callback(ch, method, properties, body): 
    print(" [x] Received %r" % body) 

channel.basic_consume(callback, 
        queue='hello', 
        no_ack=True) 

print(' [*] Waiting for messages. To exit press CTRL+C') 
channel.start_consuming() 

Она не будет работать, если QUEUE_IP = 127.0.0.1, и я также попытался использовать локальный адрес IP-машины, но я только получаю

pika.exceptions.ProbableAuthenticationError 

ли есть ли какой-либо простой способ доступа к локальному кролику из контейнера докера?

ответ

0

Решение, которое работает, чтобы просто добавить --net = параметр хоста докер запустить, например:

docker run -d --net=host my/container 

Таким образом, сеть хоста используется совместно с контейнером, и он может получить доступ к серверу rabbimq с localhost ip (127.0.0.1)

1

По Docker CLI docs:

Иногда вам нужно подключиться к хосту Докер из вашего контейнера. Чтобы включить это, передайте IP-адрес хоста Docker в контейнер , используя флаг -add-host. Чтобы найти адрес хоста, используйте команду ip addr show.

Так что вам нужно всего лишь установить: QUEUE_URL на выход ip addr show.

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