将本地 Elixir / Erlang 连接到 Docker 容器内正在运行的应用程序

将本地 Elixir / Erlang 连接到 Docker 容器内正在运行的应用程序

我在 Docker 容器(我的笔记本电脑中)内运行了一个 Elixir 应用程序。使用以下命令执行了 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
  • 4369 代表 EPMD
  • 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

我不知道如何解决这个问题。我一直在关注这个博客文章

相关内容