2017-08-28 175 views
0

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

我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

我然后使用尝试10命令:

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过程的容器。

+0

'ENTRYPOINT [“/etc/init.d/grafana-server”]' 'CMD [“start”]' – johnharris85

回答

2

除非你正在运行的容器内自己systemd守护进程(我不建议这样做,它创建了很多的问题),你不应该试图用systemctl/etc/init.d命令启动进程。容器不是虚拟机,它们是在自己的命名空间中运行应用程序的一种方法。当该应用程序退出时,您的容器也会退出。当你的应用程序类似于systemctl start命令时,你的容器将在systemctl命令返回时退出,这是没有用的,它跳过它将在grafana进程运行期间保持不变。

与其试图重新发明轮子,我建议你看看grafana自己如何包装它们的码头集装箱。特别是他们run.sh结束与:

exec gosu grafana /usr/sbin/grafana-server  \ 
    --homepath=/usr/share/grafana     \ 
    --config=/etc/grafana/grafana.ini    \ 
    cfg:default.log.mode="console"    \ 
    cfg:default.paths.data="$GF_PATHS_DATA"  \ 
    cfg:default.paths.logs="$GF_PATHS_LOGS"  \ 
    cfg:default.paths.plugins="$GF_PATHS_PLUGINS" \ 
    "[email protected]" 

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

1

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