Verbinden eines lokalen Elixir/Erlang mit einer laufenden Anwendung in einem Docker-Container

Verbinden eines lokalen Elixir/Erlang mit einer laufenden Anwendung in einem Docker-Container

Ich habe eine Elixir-Anwendung in einem Docker-Container (auf meinem Laptop) laufen. Die Elixir-Anwendung wurde mit dem folgenden Befehl ausgeführt:

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

Und der Docker-Container stellt die folgenden Ports bereit:

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

  • 4000 für den Phoenix-Server
  • 4369 für EPMD
  • 9000 für den VM-Knoten

Anschließend versuche ich über eine IEx-Shell mit folgendem Befehl eine Verbindung herzustellen:

iex --name [email protected] --cookie secretwas zu diesem Fehler führt: Protocol 'inet_tcp': register/listen error: epmd_close

Dies scheint daran zu liegen, dass der lokale epmdDaemon versucht, Port 4369 zuzuweisen, dieser jedoch bereits dem Docker-Container zugewiesen ist.

Ich habe dann den EPMD-Port wie folgt geändert:

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

und ich schaffe es, die IEx-Sitzung zu öffnen. Allerdings kann ich den auf dem Docker-Container laufenden Knoten nicht finden:

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

Ich bin nicht sicher, wie ich das lösen soll. Ich habe dies verfolgtBlogeintrag.

verwandte Informationen