[erlang-questions] Strange interaction between Docker and Erlangs ports (exit_status lost)

André Cruz <>
Thu Dec 17 12:47:27 CET 2015


On 17 Dec 2015, at 10:31, Alexey Lebedeff <> wrote:
> 
> Ah, docker at its best )
> 
> $ for iter in $(seq 1 100); do echo -n "$iter " 1>&2 ; docker run --rm edevil/docker-erlang-bug bash -c "sleep 1; erl -noshell -s test run -s init stop" 2>/dev/null; done | sort | uniq -c
>     100 SUCCESS
> 
> but
> 
> for iter in $(seq 1 100); do echo -n "$iter " 1>&2 ; docker run --rm edevil/docker-erlang-bug erl -noshell -s test run -s init stop 2>/dev/null; done | sort | uniq -c
>      12 FAILED
>      88 SUCCESS
> 
> So you should either use bash/sleep trick or try find a bug in docker. Honestly, I just gave up ) Especially given that it's not very convinient to use erlang distribution inside docker containers without something like weavedns.

There are some subtle changes that somehow mitigate the problem, for example:

$ docker run edevil/docker-erlang-bug bash -c "erl -noshell -s test run -s init stop 1>&1"
SUCCESS

Notice the strange stdout redirect. Without it:

$ docker run edevil/docker-erlang-bug bash -c "erl -noshell -s test run -s init stop"
FAILED

It seems to me that the Erlang port is not aware that the external command has completed. Can we be sure this is a Docker problem and not some incorrect assumption by the Beam VM about its environment? This recent e-mail http://erlang.org/pipermail/erlang-questions/2015-October/086590.html talks about launched processes being on another process session, can this be related?

André


More information about the erlang-questions mailing list