Dockerfile xây dựng - có thể bỏ qua lỗi?


111

Tôi có một tệp Dockerfile. Khi xây dựng hình ảnh, quá trình xây dựng không thành công do lỗi này:

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

mà trong thực tế là vô hại. Thư viện xây dựng tốt, nhưng Docker dừng quá trình xây dựng khi nó nhận được lỗi này. Có cách nào tôi có thể hướng dẫn Docker bỏ qua điều này không?

Câu trả lời:


220

Chắc chắn rồi. Docker chỉ phản hồi các mã lỗi được trả về bởi các RUNtập lệnh shell trong Dockerfile. Nếu bạn Dockerfilecó một cái gì đó như:

RUN make

Bạn có thể thay thế bằng:

RUN make; exit 0

Điều này sẽ luôn trả về một 0mã thoát (thành công). Những bất lợi ở đây là hình ảnh của bạn sẽ xuất hiện để xây dựng thành công ngay cả khi có những sai sót thực tế trong quá trình xây dựng.


2
Tôi đã đến đây khi cố gắng chạy service php7-fpm start. Nó sẽ trả về 1 và RUN sẽ không thành công; sử dụng service php7-fpm start; service php7-fpm statuskhông thủ thuật - nó dường như cũng giải quyết được một vấn đề trong quá trình xây dựng, vì cả hai lệnh chạy riêng biệt sẽ gây ra rắc rối.
igorsantos07

Tôi đã đến đây khi cố gắng xây dựng Qt5 từ nguồn. Nó sẽ xây dựng tốt, nhưng sử dụng xây dựng đồng thời kết hợp với thực tế là quá trình xây dựng Qt có các kiểm tra thời gian xây dựng chạy từ thực hiện (cố ý không thành công) lệnh RUN của tôi đã thoát với lỗi (2). Điều này hy vọng sẽ giải quyết được vấn đề!
Lennart Rolland

33

Điều này có thể được quan tâm đối với những người có lỗi tiềm ẩn trong hình ảnh của họ không đủ vô hại để không được chú ý / ghi lại . (Ngoài ra, không có đủ đại diện để nhận xét, vì vậy đây như một câu trả lời.)

Như đã chỉ ra, nhược điểm của RUN make; exit 0nó là bạn không biết nếu quá trình xây dựng của bạn không thành công. Do đó, thay vì sử dụng một cái gì đó như:

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

Như vậy, bạn sẽ nhận được thông báo qua nhật ký quá trình xây dựng hình ảnh của docker và bạn có thể xem chính xác những gì đã xảy ra trong quá trình makethực thi (hoặc bất kỳ quá trình thực thi nào khác, điều này không bị hạn chế).


Đây là câu trả lời được đánh giá thấp. Trường hợp sử dụng của tôi là một số danh sách gói không thể truy cập được và apt-get update -ybị lỗi.
Silviu Burcea

14

Bạn cũng có thể sử dụng lỗi bỏ qua bash tiêu chuẩn || true, rất hay nếu bạn đang ở giữa một chuỗi:

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

chỉ những gì tôi cần :) còn gì tuyệt hơn là thất bại nếu công việc không thành công, nhưng sau giai đoạn tiếp theo (dọn dẹp)
csomakk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.