У меня есть приложение 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
Я не знаю, как это решить. Я следил за этим Сообщение блога.