2017-02-10 11 views
3

Я пытаюсь запустить локально Erlang Observer App, а затем подключиться к удаленному контейнеру Docker, в котором работает мое приложение Elixir/Phoenix.Использование приложения Erlang Observer с удаленным сервером Elixir Phoenix внутри Docker

Проблема, которую я получаю, не может быть подключена.

Из моих исследований мне кажется, что мне нужно знать IP-адрес изображения Докер перед запуском сервера Phoenix, так что я могу запустить его так:

iex --name [email protected] -S mix phoenix.server

Я не уверен, нужно ли печенье, поэтому я также попытался

iex --name [email protected] --cookie random_cookie -S mix phoenix.server

Я попытался использовать имя хоста вместо IP-адрес, которые не похож на работу.

После того, как у меня есть, что работает, то я ожидаю, чтобы запустить Observer как этот

erl -name [email protected] -setcookie random_cookie -run observer

Или, с Iex

iex --name [email protected] --cookie random_cookie 

iex> :observer.start() 

Могу ли я запустить сервер Phoenix без необходимости знать IP-адрес и по-прежнему сможете удаленно подключаться к Observer?

Я могу понять, что IP-адрес будет иметь Docker изображения во время строительства его с этой командой оболочки

ip addr | grep -Eo 'inet (.*) scope global' | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

Но не могу понять, как сделать это в команде, чтобы начать сервер Phoenix.

Я знаю, что есть возможное решение с запуском изображений докеров со статическим IP-адресом, но я не могу установить статические IP-адреса с моей настройкой.

Любая помощь приветствуется.

+0

Можете ли вы использовать полное доменное имя сервера? И Феникс начинает с команды в вашем вопросе? – Stratus3D

ответ

1

Могу ли я запустить Phoenix-сервер без необходимости знать IP-адрес и все еще иметь возможность удаленно подключаться к Observer?

Да, с DNS вы можете. Конечно, вам, по крайней мере, нужно будет узнать полное доменное имя сервера, на котором запущен узел Erlang. Хотя это не так коротки, как короткое имя узла Erlang (например, [email protected]), оно все же, вероятно, лучше IP-адреса. Я не слишком хорошо знаком с Docker, так что может быть проще придерживаться IP-адреса. В этой ситуации это не принесет вам многого.

После того, как у меня есть, что работает, то я ожидаю, чтобы запустить Observer как этот

erl -name [email protected] -setcookie random_cookie -run observer 

Какой сервер вы используете эту команду? Это должно быть на машине с Erlang, скомпилированной с поддержкой Wx.Если это на другой машине, чем тот, на котором запущен ваш сервер Phoenix, это не сработает (это то, что я понимаю так).

Вам нужно будет сделать что-то вроде этого, вместо:

  1. Найти EPMD порт на контейнере работает Phoenix

    $ ssh phoenix-host "epmd -names" 
    epmd: up and running on port 4369 with data: 
    name some_phoenix_node at port 58769 
    

    Обратите внимание на порт для самого EPMD и порт узел, который вам интересен при отладке. Повторное подключение к феникс хост с портами вы нашли пересылаемой:

    $ ssh -L 4369:localhost:4369 -L 58769:localhost:58769 phoenix-host 
    
  2. На вашей машине запустить скрытый узел Erlang запуска приложения наблюдателя:

    $ iex -name [email protected] -setcookie <phoenix-server-cookie> -hidden -run observer 
    

    приложение должно открыть, и вы должны быть возможность выбора узла, на котором запущен сервер phoenix.

Источник: https://gist.github.com/pnc/9e957e17d4f9c6c81294

Обновление 2/20/2017

Я написал сценарий, который может сделать выше автоматически. Все порты, о которых сообщает epmd, перенаправляются на localhost: https://github.com/Stratus3D/dotfiles/blob/master/scripts/tools/epmd_port_forwarder

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

  • Нет связанных вопросов^_^