将Erlang Observer App与Docker内部的远程Elixir Phoenix服务器结合使用

我正在尝试做的是在本地运行Erlang Observer应用程序 ,然后连接到运行我的Elixir / Phoenix应用程序的远程Docker容器。

我遇到的问题是无法连接。

从我的研究中,似乎我需要在启动Phoenix服务器之前知道Docker映像的IP地址,以便我可以像这样启动它:

iex --name my_app@10.20.57.123 -S mix phoenix.server

我不确定是否需要cookie,所以我也尝试过

iex --name my_app@10.20.57.123 --cookie random_cookie -S mix phoenix.server

我试过使用主机名而不是IP地址,似乎没有工作。

一旦我有这个运行,那么我希望像这样运行Observer

erl -name observe@127.0.0.1 -setcookie random_cookie -run observer

或者,用IEx

 iex --name observe@127.0.0.1 --cookie random_cookie iex> :observer.start() 

我可以启动一个凤凰服务器,而不需要知道IP地址,仍然可以远程连接观察员?

我可以在使用这个shell命令构buildDocker镜像时知道Docker镜像的IP地址

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}'

但无法弄清楚如何把这个命令启动凤凰服务器。

我知道有一个可能的解决scheme,使用静态IP地址来启动Docker镜像,但是我不能用我的设置来设置静态IP地址。

任何帮助表示赞赏。

我可以启动一个凤凰服务器,而不需要知道IP地址,仍然可以远程连接观察员?

是的 ,你可以用DNS。 当然,您至less需要知道运行Erlang节点的服务器的完全限定域名。 虽然不像Erlang节点短名称(例如node@server )那么短,但它仍然可能比IP地址更好。 我不太熟悉Docker,所以使用IP地址可能更容易。 在这种情况下,它并没有让你很多。

一旦我有这个运行,那么我希望像这样运行Observer

 erl -name observe@127.0.0.1 -setcookie random_cookie -run observer 

你运行这个命令的服务器是什么? 它需要在Erlang编译的Wx支持的机器上。 如果这是在一台不同的机器上运行你的凤凰服务器上,这将无法正常工作(这是我所理解的情况下)。

你将需要做这样的事情,而不是:

  1. find运行phoenix的容器上的epmd端口

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

    请注意epmd本身的端口以及您感兴趣debugging的节点的端口。 使用您find的端口重新连接到phoenix主机:

     $ ssh -L 4369:localhost:4369 -L 58769:localhost:58769 phoenix-host 
  2. 在你的机器上,启动一个隐藏的运行观察程序的Erlang节点:

     $ iex -name debug@127.0.0.1 -setcookie <phoenix-server-cookie> -hidden -run observer 

    应用程序应该打开,你应该能够select运行phoenix服务器的节点。

来源: https : //gist.github.com/pnc/9e957e17d4f9c6c81294

更新2/20/2017

我写了一个可以自动完成上述操作的脚本。 所有epmd知道的端口都转发到localhost: https : //github.com/Stratus3D/dotfiles/blob/master/scripts/tools/epmd_port_forwarder