连接 docker 上的 erlang 节点



我有两个 docker 镜像,其中包含已发布的 elixir 应用程序。
我在本地计算机上运行这两个 docker。
我正在尝试连接两个节点。
如何在命名节点上运行已发布的应用?
或者 - 有没有其他方法可以做到这一点?

这就是你在不docker-composeErlang 节点的情况下这样做的方式。

1. 创建网络

docker network create example

2. 启动码头工人容器

1号航站楼

$ docker run --rm -it --name bar -h bar --net example erlang:19.3 /bin/bash
root@bar:/# erl -sname bar -setcookie example
Erlang/OTP 19 [erts-8.3.5.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V8.3.5.1  (abort with ^G)
(bar@bar)1>

2 号航站楼

docker run --rm -it --name foo -h foo --net example erlang:19.3 /bin/bash
root@foo:/# erl -sname foo -setcookie example
Erlang/OTP 19 [erts-8.3.5.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V8.3.5.1  (abort with ^G)
(foo@foo)1>

3. 检查连接性

1号航站楼

(foo@foo)1> net_adm:ping(bar@bar).
pong

2 号航站楼

(bar@bar)1> net_adm:ping(foo@foo).
pong

获取在 docker 容器上运行的版本的远程外壳

1. 在两个 docker 容器之一中启动bashshell

docker exec -it foo /bin/bash

其中foo是 docker 容器的名称。

2. 启动远程外壳

./rel/your_app/bin/your_app console

我假设您知道容器内释放的路径。

使用 docker-compose。

像这样:

docker-compose.yml:

version: "3"
services:
elixir1:
image: image-name
#(other configs here, like ports, volumes)
elixir2:
image: image-name
#(other configs here, like ports, volumes)

然后,您可以指向DNSelixir1,并在其中使用该名称elixir2

docker run命令替换为:

docker-compose up

最新更新