Назад | Перейти на главную страницу

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

У меня есть приложение Elixir, работающее внутри контейнера Docker (на моем ноутбуке). Приложение на Эликсире было запущено с помощью следующей команды:

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, используя следующую команду:

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

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