Docker 컨테이너 내부에서 실행 중인 애플리케이션에 로컬 Elixir/Erlang 연결

Docker 컨테이너 내부에서 실행 중인 애플리케이션에 로컬 Elixir/Erlang 연결

저는 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

  • Phoenix 서버의 경우 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

이 문제를 해결하는 방법을 잘 모르겠습니다. 나는 이것을 따르고 있었다블로그 게시물.

관련 정보