我在Docker容器(在我的笔记本电脑中)中运行了一个Elixir应用程序。使用以下命令执行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
然后我尝试使用以下命令使用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。
答案 0 :(得分:1)
更简单的解决方案是更改docker容器的向外端口吗?只需将其更改为4368
$ docker run -itd -p 4000:4000 4368:4369 9000:9000 <docker_image_name> 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`