2017-08-28 102 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傢伙改變他們的啓動方案,那麼你的構建將繼續工作。 ;)