Conectando um Elixir/Erlang local a um aplicativo em execução dentro de um contêiner Docker

Conectando um Elixir/Erlang local a um aplicativo em execução dentro de um contêiner Docker

Eu tenho um aplicativo Elixir em execução dentro de um contêiner Docker (no meu laptop). A aplicação Elixir foi executada com o seguinte comando:

iex \
  --name [email protected] \
  --cookie secret \
  --erl '-kernel inet_dist_listen_min 9000'  \
  --erl '-kernel inet_dist_listen_max 9000' \
  -S mix phx.server

E o contêiner Docker expõe as seguintes portas:

0.0.0.0:4000->4000/tcp, 0.0.0.0:4369->4369/tcp, 0.0.0.0:9000->9000/tcp

  • 4000 para o servidor Phoenix
  • 4369 para EPMD
  • 9000 para o nó VM

Então tento conectar usando um shell IEx usando o seguinte comando:

iex --name [email protected] --cookie secreto que resulta neste erro: Protocol 'inet_tcp': register/listen error: epmd_close

Parece que isso ocorre porque o epmddaemon local está tentando alocar para a porta 4369, no entanto, ela já está alocada para o contêiner Docker.

Em seguida, mudei a porta EPMD assim:

ERL_EPMD_PORT=4370 iex --name [email protected] --cookie secret

e consigo abrir a sessão IEx. No entanto, não consigo encontrar o nó em execução no contêiner do Docker:

iex([email protected])1> Node.connect :'[email protected]'
false

Não tenho certeza de como resolver isso. eu estava acompanhando issopostagem no blog.

informação relacionada