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 ]