【问题标题】:Using the Erlang Observer App with a remote Elixir Phoenix server inside Docker将 Erlang Observer 应用程序与 Docker 内的远程 Elixir Phoenix 服务器一起使用
【发布时间】:2017-06-29 02:12:08
【问题描述】:

我要做的是在本地运行 Erlang Observer App,然后连接到远程 Docker 容器,该容器在生产中运行我的 Elixir/Phoenix 应用程序。

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

从我的研究看来,我需要在启动 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 地址。

感谢任何帮助。

【问题讨论】:

  • 您可以使用服务器的 FQDN 代替吗? Phoenix 是否从您问题中的命令开始?

标签: docker erlang elixir


【解决方案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 编译的机器上。如果这与您在其上运行 Phoenix 服务器的机器不同,则此机器将无法正常工作(据我了解是这种情况)。

您需要这样做:

  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
    

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

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

2017 年 2 月 20 日更新

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

【讨论】:

    猜你喜欢
    • 2016-11-07
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2019-05-09
    • 2018-08-07
    • 2016-01-17
    相关资源
    最近更新 更多