ローカルの Elixir/Erlang を Docker コンテナ内で実行中のアプリケーションに接続する

ローカルの Elixir/Erlang を Docker コンテナ内で実行中のアプリケーションに接続する

私は、Docker コンテナ内 (ラップトップ内) で Elixir アプリケーションを実行しています。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
  • EPMDの場合は4369
  • VMノードの場合は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

どう解決したらいいのかわかりません。私はこれをフォローしていましたブログ投稿

関連情報