[英]Docker - Process not starting at boot
我正在容器化最新版本的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流程出錯了什么想法。
除非您在容器內運行自己的systemd守護進程(我不建議這樣做,否則會產生很多問題),否則您不應嘗試使用systemctl
或/etc/init.d
命令啟動該進程。 容器不是VM,它們是在自己的名稱空間中運行應用程序的方法。 當該應用程序退出時,您的容器也將退出。 當您的應用程序類似於systemctl
start命令時,您的容器將在systemctl命令返回的那一刻退出,這對您希望它在grafana進程運行期間保持正常運行沒有用。
建議您不要研究grafana本身如何打包docker容器的方法,而不是試圖徹底改變方向。 具體來說,它們的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" \
"$@"
或者,您可以使用docker-systemctl-replacement腳本並將其注冊為映像的主要CMD。 它將檢出* .service腳本以了解如何啟動和停止服務(無需systemd守護程序的幫助)。 因此,如果Grafana家伙改變了他們的啟動方案,那么您的構建將繼續工作。 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.