![ローカルの Elixir/Erlang を Docker コンテナ内で実行中のアプリケーションに接続する](https://rvso.com/image/718145/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AE%20Elixir%2FErlang%20%E3%82%92%20Docker%20%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%86%85%E3%81%A7%E5%AE%9F%E8%A1%8C%E4%B8%AD%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%20.png)
私は、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
どう解決したらいいのかわかりません。私はこれをフォローしていましたブログ投稿。