2016-06-13 4 views
2

Хорошо, я довольно новичок в мире Docker. Так что это может быть очень простой вопрос.Как подключиться к серверу на Docker с главной машины?

У меня есть контейнер, работающий в Docker, на котором работает RabbitMQ. Скажем, название этого контейнера - «Кролик-контейнер».

RabbitMQ контейнер был запущен с помощью этой команды:

docker run -d -t -i --name rmq -p 5672:5672 rabbitmq:3-management 

Python скрипт команда с 2 аргументами:

python ~/Documents/myscripts/migrate_data.py amqp://rabbit:5672/ ~/Documents/queue/ 

Теперь я бег Python сценария из моей хост-машины, которая создает некоторые Сообщения. Я хочу отправить эти сообщения в свой «Кролик-контейнер». Поэтому я хочу подключиться к этому контейнеру с моей главной машины (Mac OSX).

Возможно ли это? Если да, то как?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

+0

Запуск команды 'docker run -d -t -i -name rmq -p 5672: 5672 rabbitmq: 3-management' и, более конкретно, опция' -p 5672: 5672' запросить демон Docker для привязки вашего host-ip port 5672 с портом контейнера 5672. Следовательно, если вы попытаетесь с хоста на 'nc 127.0.0.1 5672', вы увидите, что' nc' подключен к сокету RabbitMQ. Вы можете связаться с ним через сетевой локальный сетевой стек, используя этот сокет. – Auzias

ответ

2

Итак, я решил это просто отображение порта прослушивания RMQ для размещения ОС:

docker run -d -t -i --name rmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management 

я ранее имел только -p 15672:15672 в моей команде. Это сопоставление пользовательского интерфейса администратора из контейнера Docker в мою ОС хоста. Я добавил -p 5672:5672, который сопоставил порт прослушивания RabbitMQ с контейнером Docker для размещения ОС.

1

Если вы используете этот контейнер в вашей локальной системе OSX, то вы должны найти свой по умолчанию докер-машины IP-адрес, выполнив:

docker-machine ip default 

Затем вы можете изменить свой питон скрипт, чтобы указать на этот адрес и сопоставленный порт на <your_docker_machine_ip>:5672.

Это происходит из-за того, что докер работает в режиме виртуализации в OSX и Windows, поэтому, когда вы сопоставляете порт с хостом, вы фактически сопоставляете его с виртуальной машиной.

+0

Не работает. Кроме того, до этого момента я не запускал «докер-машину». Почему это необходимо? – Bhushan

+0

На официальной странице изображения докер-хаба https://hub.docker.com/_/rabbitmq/ говорится, что rabbitmq: 3-управление работает на порту 15672. Остановите свой контейнер, удалите его и запустите снова, правильно сопоставляя порты и получите доступ к нему 'HTTP: // <докер-машина-ф>: 15672'. Проверьте официальные документы для получения дополнительной информации о докере-машине https://docs.docker.com/machine/overview/ –

+0

@Bhushan По умолчанию '' '' 'запущен' 'при запуске' docker-machine ls'? Хотя вы не видите 'docker-machine', когда вы устанавливаете docker на OSX, так загружается виртуальная машина boot2docker [машина настраивается и управляется] (https://github.com/docker/toolbox/blob/fcdf7c37950dab9658556b1566b4363fa930878b/osx/ mpkg/quickstart.app/Содержание/Ресурсы/Scripts/start.sh). – Matt

0

Вы сказали, что раньше никогда не использовали докер-машину, поэтому я предполагаю, что вы используете бета-версию Docker для Mac (вы должны увидеть значок докера в строке меню вверху).

Ваша команда пуска для кролика верна. Если теперь вы хотите подключиться к кролику, у вас есть два варианта:

  1. оберните питон скрипт в новый контейнер и связать его с кроликом:

    docker run -it --rm --name migration --link rmq:rabbit -v ~/Documents/myscripts:/app -w /app python:3 python migrate_data.py

    Заметим, что мы должны связать rmq:rabbit, потому что вы называете свой контейнер rmq, но используете сценарий rabbit.

  2. Выполнить свой питон скрипт на хост-машине и использования локального хоста: 5672

    python ~/Documents/myscripts/migrate_data.py amqp://localhost:5672/ ~/Documents/queue/

+0

Спасибо за ввод. Да, я использую Docker Beta. Я решил проблему, сопоставляя порт прослушивания RMQ с хостом ОС. Я отправляю свое заключение в качестве другого ответа. – Bhushan

0

Вы должны были бы запустить контейнер с портом 5672 подвергаются, возможно, 15672, а если вы хотите WebUI и 5671, если вы используете SSL или любой другой порт, для которого вы добавляете tcp-слушатель в rabbitmq. Было бы также проще, если бы у вас был определенный IP-адрес и имя хоста для контейнера rabbitmq.Чтобы сделать это, вам нужно создать свой собственный докер сеть

docker network create --subnet=172.18.0.0/16 mynet123

После этого запустите контейнер как так

docker run -d --net mynet123--ip 172.18.0.11 --hostname rmq1 --name rmq_container_name -p 15673:15672 rabbitmq:3-management

отметить, что с rabbitmq:3-management изображением порт 5672 является (ну , был, когда я его использовал), уже выставленный, поэтому не нужно это делать. --name для имени контейнера и --hostname явно для имени хоста.

Итак, теперь с вашего хоста вы можете подключиться к rmq1 серверу rabbitmq.

+0

Спасибо за помощь. Я решил проблему, сопоставляя порт RMQ с хостом ОС. – Bhushan

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