Docker - 进程不在启动时启动

时间:2017-08-28 22:08:30

标签: docker containers grafana

我正在容纳最新版本的grafana,并希望在容器启动时启动grafana-process,然后在我的K8S(kubernetes)群集中使用它。

我的Dockerfile看起来像:

FROM armdocker/baseimages/rhel:7-20161207
MAINTAINER xxxxxxxx

ENV GRAFANA_VERSION_MAJOR=4 GRAFANA_VERSION_MINOR=4 GRAFANA_VERSION_PATCH=3-1
ENV GRAFANA_VERSION=${GRAFANA_VERSION_MAJOR}.${GRAFANA_VERSION_MINOR}.${GRAFANA_VERSION_PATCH}

RUN yum clean all && yum install -y unzip tar

RUN curl  -f -L -o grafana-${GRAFANA_VERSION}.x86_64.rpm https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-${GRAFANA_VERSION}.x86_64.rpm && \
    yum localinstall grafana-${GRAFANA_VERSION}.x86_64.rpm -y

EXPOSE 3000
ENTRYPOINT ["/etc/init.d/grafana-server start"]

构建Dockerfile成功并且不会返回任何错误。

当我尝试运行此图像时,我收到错误。

docker run -dit -p 3000:3000 armdocker/proj/grafana:1.0.5
471b2acb964caad69bbb78831a59ee9d2b27997911b5b104b0057ddc957d1101
Error response from daemon: Cannot start container 471b2acb964caad69bbb78831a59ee9d2b27997911b5b104b0057ddc957d1101: [8] System error: exec: "/etc/init.d/grafana-server start": stat /etc/init.d/grafana-server start: no such file or directory

这似乎非常奇怪,因为我首先安装了RPM(这使得文件/etc/init.d/grafana-server),然后我尝试以ENTRYPOINT

开始这个过程

然后我尝试了

CMD ["/etc/init.d/grafana-server start"]

这也导致相同的错误/etc/init.d/grafana-server start: no such file or directory

然后我尝试使用systemctl命令:

docker run -dit -p 3000:3000 armdocker/proj/grafana:1.0.6
bfd492c75a0f4c284fc0fdbd5a590f0155f6f67bcb4834e144f344bb789546f3
Error response from daemon: Cannot start container bfd492c75a0f4c284fc0fdbd5a590f0155f6f67bcb4834e144f344bb789546f3: [8] System error: exec: "/bin/systemctl start grafana-server.service": stat /bin/systemctl start grafana-server.service: no such file or directory

我对于使用已启动的grafana流程的容器出错我的想法是错误的。

2 个答案:

答案 0 :(得分:1)

除非您在容器内运行自己的systemd守护程序(我不建议这样做,否则会产生很多问题),您不应该尝试使用systemctl或{{}创建进程{1}}命令。容器不是VM,它们是在自己的命名空间中运行应用程序的方法。当该应用程序退出时,您的容器也会退出。当您的应用程序类似于/etc/init.d启动命令时,您的容器将在systemctl命令返回的那一刻退出,这对您跳转时没有用,它会在grafana进程运行期间保持不变。

我建议你不要试图重新发明轮子,而是看看grafana如何打包他们的docker容器。具体来说,他们的run.sh以:

结束
systemctl

他们的回购在https://github.com/grafana/grafana-docker

结束了

答案 1 :(得分:0)

作为替代方案,您可以使用docker-systemctl-replacement script并将其注册为图像的主要CMD。它将检查* .service脚本以了解如何启动和停止服务(没有systemd守护程序的帮助)。因此,如果Grafana家伙改变他们的启动方案,那么你的构建将继续工作。 ;)