Tách stdout và stderr cho `docker run`?
Oct 27 2020
Tôi có thể lấy ống stdout và stderr riêng biệt cho docker run?
Thí dụ:
$ docker run --rm -it alpine sh -c 'echo this is stdout; echo this is stderr >&2' \ 2> stderr.txt this is stdout this is stderr $ cat stderr.txt
Những gì tôi mong đợi:
$ sh -c 'echo this is stdout; echo this is stderr >&2' 2> stderr.txt this is stdout $ cat stderr.txt
this is stderr
Trả lời
2 rosaroteelfe Oct 27 2020 at 19:42
Vấn đề đối với bạn là tùy chọn '-t'. Sau khi loại bỏ nó, stderr sẽ hoạt động như mong đợi:
$ docker run -i --rm alpine sh -c 'echo this is stdout; echo this is stderr >&2' 2>stderr this is stdout $ cat stderr
this is stderr
Khi bạn sử dụng tùy chọn '-t' (hoặc --tty), stdout và stderr được kết hợp với nhau. Điều này không được ghi lại rõ ràng trong docker vì "Đây là hành vi bình thường của tty." [Nguồn: moby issue 25542, comment 238647584 by bamarni ]