【发布时间】:2018-08-07 07:35:06
【问题描述】:
我有一个 Elixir 应用程序在 Docker 容器中运行(在我的笔记本电脑中)。 Elixir 应用程序使用以下命令执行:
iex \
--name test@1.2.3.4 \
--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
- 凤凰服务器为 4000
- EPMD 为 4369
- 9000 用于 VM 节点
然后我尝试使用以下命令使用 IEx shell 进行连接:
iex --name local@127.0.0.1 --cookie secret 导致此错误:
Protocol 'inet_tcp': register/listen error: epmd_close
这似乎是因为本地 epmd 守护进程正在尝试分配端口 4369,然而,这已经分配给 Docker 容器。
然后我像这样更改了 EPMD 端口:
ERL_EPMD_PORT=4370 iex --name local@127.0.0.1 --cookie secret
我设法打开了 IEx 会话。但是,我找不到在 Docker 容器上运行的节点:
iex(local@127.0.0.1)1> Node.connect :'test@1.2.3.4'
false
我不确定如何解决这个问题。我在关注这个blog post。
【问题讨论】:
-
不确定它是否适用,但之前的S O answer 可能对您的问题有些影响。
标签: docker networking erlang elixir epmd