【发布时间】:2016-12-19 03:11:47
【问题描述】:
玩转 Erlang 和 Docker 容器。我跨两个容器创建了一个玩具应用程序:客户端和服务器。这是 docker-compose.yml 文件:
version: '2'
services:
client:
image: test3_client
links:
- server
server:
image: test3_server
这是服务器的 Dockerfile
FROM erlang:19.0
ADD . /app
WORKDIR /app
CMD erl -sname server -setcookie abc -noshell -s test3 start
(客户端大致相同,只是名称为client并进入test3的client函数)。这是 Erlang 代码:
-module (test3).
-compile(export_all).
start() ->
register(greeter, spawn(fun() -> loop() end)) .
loop() ->
io:format("server loop~n"),
receive
{greeting, Sender, Name} ->
io:format("greeting: ~w~n", [Name]),
Sender ! {response, self(), "Yowser " + Name}
end,
loop() .
client() ->
timer:sleep(250),
ok = ping_server(10),
greeter ! {greeting, self, "diego"},
receive
{response, Pid, Greeting} ->
io:format("I was greeted: " + Greeting + "!~n")
end .
ping_server(Count) ->
case Count of
X when X < 1 ->
{error, "unable to reach server"};
_ ->
case net_adm:ping(server) of
pong ->
io:format("found server~n"),
ok ;
pang ->
io:format("unable to reach server~n"),
timer:sleep(1000),
ping_server(Count - 1)
end
end .
当我使用docker-compose up 运行容器时,我得到了这个:
docker-compose up
Creating network "test3_default" with the default driver
Creating test3_server_1
Creating test3_client_1
Attaching to test3_server_1, test3_client_1
server_1 | server loop
client_1 | unable to reach server
client_1 | unable to reach server
client_1 | unable to reach server
client_1 | unable to reach server
client_1 | unable to reach server
. . .
最终客户感到无聊并放弃了。
你能看出我哪里错了吗?
我看过 Chris Smith 的 this post,非常棒。但是 Chris 使用的是套接字,而我想使用原生 Erlang 消息传递...
【问题讨论】:
标签: docker erlang docker-compose