Docker: el process no se inicia al arrancar

Estoy contenedorizando la última versión de grafana y quiero iniciar el grafana-process cuando el contenedor se inicia y luego lo uso en mi clúster K8S (kubernetes).

My Dockerfile se ve así:

 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"] 

La construcción de Dockerfile es exitosa y no devuelve errores.

Cuando bash ejecutar esta image, obtengo el ERROR.

 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 

Esto parece ser muy extraño ya que estoy instalando primero el RPM (que hace el file /etc/init.d/grafana-server ) y luego estoy tratando de comenzar el process como mi ENTRYPOINT

Luego intenté

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

Esto también da como resultado el mismo ERROR /etc/init.d/grafana-server start: no such file or directory

Luego intenté usar el command 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 

No tengo ideas sobre qué estoy haciendo mal para tener un contenedor con un process de inicio de grafana.

A less que esté ejecutando su propio daemon systemd dentro del contenedor (no lo recomiendo, crea muchos problemas), no debería intentar iniciar el process con un systemctl o /etc/init.d . Los contenedores no son una VM, son un método para ejecutar una aplicación dentro de su propio espacio de nombres. Y cuando esa aplicación sale, también lo hace su contenedor. Cuando su aplicación es algo así como un command systemctl start, su contenedor se cerrará en el momento en que regrese el command systemctl, lo que no es útil si estuviera saltando, permanecería activo durante la ejecución del process grafana.

En lugar de tratar de redevise la rueda, te recomiendo que veas cómo los packages grafana su contenedor docker. Específicamente su run.sh termina con:

 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" \ "$@" 

Su repository ha terminado en https://github.com/grafana/grafana-docker

Como alternativa, puede usar el script docker-systemctl-replacement y registrarlo como el CMD principal de la image. Verificará los scripts * .service para saber cómo iniciar y detener un service (sin la ayuda de un daemon systemd). Entonces, si los chicos de Grafana cambian su escenario de inicio, tus comstackciones seguirán funcionando. 😉