Docker контейнер выходит без какого-либо сообщения

Я пытаюсь запустить xinetd в контейнере Docker.

Мой файл Docker очень прост:

# voip-monitor
#
# VERSION               0.0.1
FROM ubuntu:14.04

RUN apt-get update && apt-get install -y xinetd python 

EXPOSE 9090 
CMD ["/usr/sbin/xinetd", "-d -dontfork"]

Когда я начинаю свой контейнер с:

docker run -d -p 9090:9090 --name voip-monitor voip-monitor

Это начинается, но существует через 2 секунды.

Когда я начинаю свой контейнер с:

docker run -d -p 9090:9090 --name voip-monitor voip-monitor /usr/sbin/xinetd -d -dontfork

Работает как положено. Что мне здесь не хватает?

3 ответа

Решение

Вам нужен параметр "-d"?

Я попытался запустить контейнер на основе вашего изображения, и вот что я получил:

root@r2d2:/tmp/tmp# docker run -d -p 9090:9090 --name voip-monitor voip-monitor
e482c8d486134749c6f2747c252eed96f628924c4158c05ca09ac487ff87db24
root@r2d2:/tmp/tmp# docker logs voip-monitor 
xinetd: msg_init failed: can't open log file

Проверка исходного кода Я думаю, что эта строка может быть проблемой, возможно, связанной с доступом к /dev/tty.

Удаление параметра "-d" решило проблему для меня.

Я думаю, что проблема в том, что -d а также -dontfork опции помещаются в тот же элемент массива / строку в Dockerfile выше:

CMD ["/usr/sbin/xinetd", "-d -dontfork"]

Исправляя CMD инструкция к

CMD ["/usr/sbin/xinetd", "-d", "-dontfork"]

должен решить проблему.

В то время как -d возможно, не нужно, многим из нас нравится подробный вариант. Чтобы эмулировать tty и сделать xinetd счастливым, попробуйте использовать команду script.

script -c "xinetd -d -dontfork"

Который становится

CMD ["script", "-c", "xinetd -d -dontfork"]
or
CMD script -c "xinet -d -dontfork"

Работает с изображением Debian:8, используя Docker 1.13.0

Другие вопросы по тегам