У меня есть приложение 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
- 4000 для сервера Phoenix
- 4369 для ЭПМД
- 9000 для узла виртуальной машины
Затем я пытаюсь подключиться с помощью оболочки IEx, используя следующую команду:
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
Я не уверен, как это решить. Я следил за этимСообщение блога.