我正在尝试在 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 镜像配合使用