将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支持的机器上。 如果这是在一台不同的机器上运行你的凤凰服务器上,这将无法正常工作(这是我所理解的情况下)。
你将需要做这样的事情,而不是:
-
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
-
在你的机器上,启动一个隐藏的运行观察程序的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