Compilação do Dockerfile - possível ignorar o erro?

111

Eu tenho um Dockerfile. Ao construir a imagem, a construção falha neste erro:

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

o que na realidade é inofensivo. A biblioteca é compilada bem, mas o Docker interrompe a compilação assim que recebe esse erro. Existe alguma maneira de instruir o Docker a simplesmente ignorar isso?

Oskar
fonte

Respostas:

220

Certo. O Docker está apenas respondendo aos códigos de erro retornados pelos RUNscripts de shell no Dockerfile. Se você Dockerfiletem algo como:

RUN make

Você pode substituir isso por:

RUN make; exit 0

Isso sempre retornará um 0código de saída (sucesso). A desvantagem aqui é que sua imagem vai aparecer para construir com sucesso, mesmo se não são erros reais no processo de construção.

larsks
fonte
2
Eu vim aqui quando tentei correr service php7-fpm start. Ele retornaria 1 e RUN iria falhar; usar service php7-fpm start; service php7-fpm statusfaz o truque - parece resolver um problema durante a compilação também, uma vez que ambos os comandos executados separadamente dariam problemas.
igorsantos07
Eu vim aqui quando tento construir o Qt5 a partir da fonte. Seria muito bom compilar, mas usando compilação simultânea combinada com o fato de que o processo de compilação do Qt tem testes de tempo de compilação executados a partir do make (que falham intencionalmente) meu comando RUN saiu com o erro (2). Espero que isso resolva o problema!
Lennart Rolland
33

Isso pode ser do interesse daqueles cujos erros potenciais em suas imagens não são inofensivos o suficiente para passar despercebidos / registrados . (Além disso, não há representantes suficientes para comentar, então aqui está uma resposta.)

Como apontado, a desvantagem de RUN make; exit 0você não saber se sua construção falhou. Portanto, use algo como:

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

Assim, você é notificado por meio do log do processo de construção da imagem do docker e pode ver o que exatamente deu errado durante make(ou qualquer outra execução, isso não está restrito a fazer).

meses
fonte
Esta é uma resposta muito subestimada. Meu caso de uso era algumas listas de pacotes não acessíveis e apt-get update -yestavam falhando.
Silviu Burcea
14

Você também pode usar o bash ignore error padrão || true, o que é bom se você estiver no meio de uma cadeia:

RUN <first stage> && <job that might fail> || true && <next stage>
MortenB
fonte
apenas o que eu precisava :) o que seria ainda melhor é falhar se o trabalho falhar, mas após a próxima fase (limpeza)
csomakk