在Docker中使用Erlang Observer App和远程Elixir Phoenix服务器

时间:2017-02-10 16:34:20

标签: docker erlang elixir

我要做的是在本地运行Erlang Observer App,然后连接到正在运行我的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地址的情况下启动Phoenix服务器,并且仍然能够与Observer远程连接吗?

我可以在使用此shell命令构建它时弄清楚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}'

但无法弄清楚如何将此命令用于启动Phoenix服务器。

我知道有一个可能的解决方案,用静态IP地址启动docker镜像,但我无法使用我的设置设置静态IP地址。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  

我可以在不需要知道IP地址的情况下启动Phoenix服务器   并且仍然能够与Observer远程连接?

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

  

一旦我运行了那么我希望像这样运行Observer

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

您在运行此命令的服务器是什么?它需要在具有Wx支持的Erlang编译的机器上。如果这个机器与运行凤凰服务器的机器不同,那么这将不起作用(我理解的情况就是这样)。

您需要执行以下操作:

  1. 在运行phoenix的容器中找到epmd端口

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

    请注意epmd本身的端口以及您要调试的节点的端口。使用您找到的端口重新连接到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
    

    该应用程序应该打开,您应该能够选择运行凤凰服务器的节点。

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

    2017年2月20日更新

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