Подключение локального Elixir/Erlang к работающему приложению внутри контейнера Docker

Подключение локального Elixir/Erlang к работающему приложению внутри контейнера Docker

У меня есть приложение 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

Я не уверен, как это решить. Я следил за этимСообщение блога.

Связанный контент