將本機 Elixir/Erlang 連接到 Docker 容器內正在執行的應用程式

將本機 Elixir/Erlang 連接到 Docker 容器內正在執行的應用程式

我有一個 Elixir 應用程式在 Docker 容器(在我的筆記型電腦中)內運行。 Elixir 應用程式是使用以下命令執行的:

iex \
  --name [email protected] \
  --cookie secret \
  --erl '-kernel inet_dist_listen_min 9000'  \
  --erl '-kernel inet_dist_listen_max 9000' \
  -S mix phx.server

Docker容器暴露了以下連接埠:

0.0.0.0:4000->4000/tcp, 0.0.0.0:4369->4369/tcp, 0.0.0.0:9000->9000/tcp

  • Phoenix 伺服器 4000
  • EPMD 4369
  • VM節點9000

然後我嘗試使用以下命令使用 IEx shell 進行連線:

iex --name [email protected] --cookie secret這會導致此錯誤: Protocol 'inet_tcp': register/listen error: epmd_close

這似乎是因為本機epmd守護程式正在嘗試指派給連接埠 4369,但是,這已經被指派給了 Docker 容器。

然後我更改了 EPMD 端口,如下所示:

ERL_EPMD_PORT=4370 iex --name [email protected] --cookie secret

我設法打開 IEx 會話。但是,我找不到在 Docker 容器上運行的節點:

iex([email protected])1> Node.connect :'[email protected]'
false

我不知道如何解決這個問題。我正在關注這個部落格文章

相關內容