[英]Can't connect to SQL Server from elixir/phoenix in Docker
[英]Using the Erlang Observer App with a remote Elixir Phoenix server inside Docker
我想要做的是在本地運行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地址。
任何幫助表示贊賞。
我可以在不需要知道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的容器上找到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
在您的計算機上,啟動一個運行觀察者應用程序的隱藏Erlang節點:
$ iex -name debug@127.0.0.1 -setcookie <phoenix-server-cookie> -hidden -run observer
該應用程序應該打開,您應該能夠選擇運行鳳凰服務器的節點。
資料來源: https : //gist.github.com/pnc/9e957e17d4f9c6c81294
2017年2月20日更新
我寫了一個腳本,可以自動執行上述操作。 epmd知道的所有端口都轉發到localhost: https : //github.com/Stratus3D/dotfiles/blob/master/scripts/tools/epmd_port_forwarder
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.