Подключение к запущенному выпуску приложения Erlang в контейнере докеров

Это смущает, но я полностью застрял и потратил впустую большую часть этого утра. У меня есть выпуск приложения Erlang, созданный relx, развернутый и работающий в контейнере Docker. Мне нужно добраться до оболочки на работающем узле, но я не могу этого сделать. Вот что происходит:

$ docker exec -it 770b497d7f27 /bin/bash
[root@ff /]# /app/bin/ff 
Usage: ff {start|start_boot <file>|foreground|stop|restart|reboot|pid|ping|console|console_clean|console_boot <file>|attach|remote_console|upgrade|escript|rpc|rpcterms}
[root@ff /]# /app/bin/ff ping
pong
[root@ff /]# /app/bin/ff attach
Can't access pipe directory /tmp/erl_pipes/[email protected]/: No such file or directory
[root@ff /]# /app/bin/ff remote_console
Eshell V7.1  (abort with ^G)
([email protected])1> ^G
Eshell V7.1  (abort with ^G)
([email protected])1> 

И все - я могу выйти с q()..

В /tmp нет erl_pipes.

Кажется, что Control-G захвачен Docker. Не могу попасть в меню "Команда переключения пользователя".

Даже запустить чистую оболочку Erlang не так просто:

[root@ff /]# /app/erts-7.1/bin/erl
{"init terminating in do_boot",{'cannot get bootfile','/app/bin/start.boot'}}

Crash dump is being written to: erl_crash.dump...done
init terminating in do_boot ()

У меня закончились идеи. Любая помощь будет оценена по достоинству.


person egbokul    schedule 07.01.2016    source источник
comment
remote_shell дает вам удаленную оболочку, но вам также нужен ^G для работы?   -  person Michael    schedule 07.01.2016
comment
Я пытаюсь запустить функцию, определенную в модуле приложения, но узел кажется пустым — это тот же узел, на котором работает приложение? Если да, то как мне получить доступ к модулям приложения?   -  person egbokul    schedule 07.01.2016
comment
Я бы, конечно, ожидал, что remote_console подключит вас к оболочке работающих узлов (извините, я сказал «remote_shell» выше, не так ли, но вы знали, что я имел в виду, я ожидаю). Если [email protected] не ваш узел, то я думаю, что он работает не так, как я ожидаю, или не работает. Вы можете попробовать вручную, запустив erl -name '[email protected]' -cookie YOUR_COOKIE -remsh '[email protected]', что будет более или менее похоже на то, что делает /app/bin/ff remote_console.   -  person Michael    schedule 07.01.2016
comment
Нет, это не дает мне оболочку узла приложения, только тот, который запускает его...   -  person egbokul    schedule 07.01.2016


Ответы (1)


Нашел обходной путь, удалось заставить ^G работать, переопределив стандартные «тупые» наборы докеров терминала:

export TERM=xterm

После этого ^G работает, запуск удаленной оболочки работает, и я счастлив в кемпинге! Был бы рад узнать, почему ни команды attach, ни remote_console не работают.

person egbokul    schedule 07.01.2016