Compilación de Dockerfile: ¿es posible ignorar el error?


111

Tengo un Dockerfile. Al construir la imagen, la compilación falla en este error:

automake: error: no 'Makefile.am' found for any configure output
Error build: The command [/bin/sh -c aclocal && autoconf && automake -a] returned a non-zero code: 1

que en realidad es inofensivo. La biblioteca se compila bien, pero Docker detiene la compilación una vez que recibe este error. ¿Hay alguna forma de que pueda indicarle a Docker que simplemente ignore esto?

Respuestas:


220

Por supuesto. Docker solo responde a los códigos de error devueltos por los RUNscripts de shell en Dockerfile. Si Dockerfiletiene algo como:

RUN make

Podrías reemplazar eso con:

RUN make; exit 0

Esto siempre devolverá un 0código de salida (correcto). La desventaja aquí es que su imagen aparecerá para construir con éxito, incluso si no son errores reales en el proceso de construcción.


2
Vine aquí cuando intentaba correr service php7-fpm start. Devolvería 1 y RUN fallaría; usar service php7-fpm start; service php7-fpm statushace el truco: parece resolver un problema durante la compilación también, ya que ambos comandos que se ejecutan por separado causarían problemas.
igorsantos07

Vine aquí cuando intentaba construir Qt5 desde la fuente. Se compilaría bien, pero al usar la compilación simultánea combinada con el hecho de que el proceso de compilación de Qt tiene pruebas de tiempo de compilación que se ejecutan desde make (que falla intencionalmente), mi comando RUN salió con el error (2). ¡Con suerte, esto resolverá el problema!
Lennart Rolland

33

Esto podría ser de interés para aquellos cuyos posibles errores en sus imágenes no son lo suficientemente inofensivos como para pasar desapercibidos / registrados . (Además, no hay suficiente representante para comentar, así que aquí como respuesta).

Como se señaló, la desventaja RUN make; exit 0es que no se llega a saber si su compilación falló. Por lo tanto, use algo como:

make test 2>&1 > /where/ever/make.log || echo "There were failing tests!"

De esta manera, se le notifica a través del registro del proceso de construcción de la imagen de la ventana acoplable, y puede ver qué fue exactamente lo que salió mal durante make(o cualquier otra ejecución, esto no está restringido).


Esta es una respuesta muy subestimada. Mi caso de uso fue que algunas listas de paquetes no estaban accesibles y apt-get update -yestaban fallando.
Silviu Burcea

14

También puede usar el error estándar de ignorar bash || true, que es bueno si está en el medio de una cadena:

RUN <first stage> && <job that might fail> || true && <next stage>

justo lo que necesitaba :) lo que sería aún mejor es fallar si el trabajo falla, pero después de la siguiente etapa (limpieza)
csomakk
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.