Docker 容器退出时没有任何消息

Docker 容器退出时没有任何消息

我正在尝试在 Docker 容器中运行 xinetd。

我的 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

它按预期工作。我这里遗漏了什么?

答案1

需要“-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”参数解决了我的问题。

答案2

我认为问题在于上面的-d-dontfork选项被放入了同一个数组元素/字符串中Dockerfile

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

更正CMD指令

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

应该可以解决问题。

答案3

虽然-d可能不需要,但我们中的许多人喜欢详细选项。要模拟 tty 并使 xinetd 正常运行,请尝试使用 script 命令。

script -c "xinetd -d -dontfork"

这就变成了

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

使用 docker 1.13.0 与 debian:8 镜像配合使用

相关内容