Dockerfile oluşturma - hatayı göz ardı etmek mümkün mü?


112

Dockerfile'ım var. Görüntüyü oluştururken, yapı bu hatada başarısız olur:

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

gerçekte zararsızdır. Kitaplık iyi derlenir, ancak Docker bu hatayı aldığında derlemeyi durdurur. Docker'a bunu görmezden gelmesi için talimat verebilmemin bir yolu var mı?

Yanıtlar:


221

Elbette. Docker, yalnızca .NET Framework içindeki RUNkabuk komut dosyaları tarafından döndürülen hata kodlarına yanıt veriyor Dockerfile. Senin Dockerfilegibi bir şey varsa :

RUN make

Bunu şununla değiştirebilirsiniz:

RUN make; exit 0

Bu her zaman bir 0(başarılı) çıkış kodu döndürür . Burada dezavantaj resim var olsa bile başarıyla inşa etmek görünecek olmasıdır olan yapı sürecinde fiili hatalar.


2
Buraya koşmaya çalışırken geldim service php7-fpm start. 1 döndürür ve RUN başarısız olur; kullanmak service php7-fpm start; service php7-fpm statushile yapar - her iki komutun ayrı ayrı çalışması sorun çıkaracağından, oluşturma sırasında da bir sorunu çözüyor gibi görünüyor.
igorsantos07

Qt5'i kaynaktan oluşturmaya çalışırken buraya geldim. Bu gayet iyi inşa ederdi, ancak eşzamanlı derlemeyi kullanarak, Qt derleme işleminin make'den çalıştırılan derleme zamanı testlerine sahip olması (ki bu kasıtlı olarak başarısız olur) RUN komutumdan hata (2) ile çıkıldı. Bu umarım sorunu çözecektir!
Lennart Rolland

34

Bu, resimlerindeki olası hataları fark edilmeden / kayıt altına alınacak kadar zararsız olmayanlar için ilgi çekici olabilir . (Ayrıca, yorum yapmak için yeterli temsilci yok, bu yüzden burada bir cevap olarak.)

Belirtildiği gibi, dezavantajı, RUN make; exit 0yapınızın başarısız olup olmadığını bilmemenizdir. Bu nedenle, aşağıdaki gibi bir şey kullanın:

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

Bunun gibi, docker görüntüsü oluşturma işlem günlüğü aracılığıyla bildirim alırsınız ve tam olarak neyin kötü gittiğini görebilirsiniz. make (veya başka herhangi bir yürütme, bu yapmakla sınırlı değildir).


Bu waaay küçümsenmemiş cevaptır. Benim kullanım durumum bazı paket listelerine ulaşılamıyordu ve apt-get update -ybaşarısız oluyordu.
Silviu Burcea

16

Ayrıca || true, bir zincirin ortasındaysanız güzel olan standart bash ignore hatasını da kullanabilirsiniz :

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

tam ihtiyacım olan şey :) daha da iyi olan şey, iş başarısız olursa başarısız olmaktır, ancak bir sonraki aşamadan sonra (temizleme)
csomakk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.