저는 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
이 문제를 해결하는 방법을 잘 모르겠습니다. 나는 이것을 따르고 있었다블로그 게시물.