I've got an Elixir application running inside a Docker container (in my laptop). The Elixir application was executed with the following command:
iex \
--name [email protected] \
--cookie secret \
--erl '-kernel inet_dist_listen_min 9000' \
--erl '-kernel inet_dist_listen_max 9000' \
-S mix phx.server
And the Docker container exposes the following ports:
0.0.0.0:4000->4000/tcp, 0.0.0.0:4369->4369/tcp, 0.0.0.0:9000->9000/tcp
- 4000 for the Phoenix server
- 4369 for EPMD
- 9000 for the VM node
Then I try to connect using an IEx shell using the following command:
iex --name [email protected] --cookie secret
which results in this error:
Protocol 'inet_tcp': register/listen error: epmd_close
This seems to be because the local epmd
daemon is trying to allocate to port 4369, however, this is already allocated to the Docker container.
I then changed the EPMD port like so:
ERL_EPMD_PORT=4370 iex --name [email protected] --cookie secret
and I manage to open up the IEx session. However, I cannot find the node running on the Docker container:
iex([email protected])1> Node.connect :'[email protected]'
false
I'm not sure how to solve this. I was following this blog post.