![Подключение локального Elixir/Erlang к работающему приложению внутри контейнера Docker](https://rvso.com/image/718145/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE%20Elixir%2FErlang%20%D0%BA%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%89%D0%B5%D0%BC%D1%83%20%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8E%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8%20%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B0%20Docker%20.png)
У меня есть приложение 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
Я не уверен, как это решить. Я следил за этимСообщение блога.