【发布时间】:2017-12-16 20:40:57
【问题描述】:
我有两个 docker 镜像,其中包含一个已发布的 elixir 应用程序。
我在本地机器上运行这两个 docker。
我正在尝试连接这两个节点。
如何在命名节点上运行已发布的应用程序?
或者 - 还有其他方法吗?
【问题讨论】:
我有两个 docker 镜像,其中包含一个已发布的 elixir 应用程序。
我在本地机器上运行这两个 docker。
我正在尝试连接这两个节点。
如何在命名节点上运行已发布的应用程序?
或者 - 还有其他方法吗?
【问题讨论】:
这就是在没有 docker-compose 的 Erlang 节点的情况下你会这样做的方式。
docker network create example
$ 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>
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>
(foo@foo)1> net_adm:ping(bar@bar).
pong
(bar@bar)1> net_adm:ping(foo@foo).
pong
bash shelldocker exec -it foo /bin/bash
foo 是 docker 容器的名称。
./rel/your_app/bin/your_app console
我假设你知道容器内的释放路径。
【讨论】:
docker network 并为正在运行的 docker 容器提供主机 (-h),则两个 Erlang 节点应该能够相互连接。
类似这样的:
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)
然后,您可以使用其中的名称指向 DNS elixir1 和 elixir2。
将您的 docker run 命令替换为:
docker-compose up
【讨论】:
Node.connect 在长生不老药中