저는 이를 script
도커 컨테이너의 진입점으로 사용하여 해당 컨테이너에서 발생하는 모든 일을 마운트된 볼륨의 파일에 기록하려고 합니다. tty가 있는 경우 이는 훌륭하게 작동합니다.
$ docker run -t --rm --privileged -v $PWD:/log rhel7:7.7 /usr/bin/script /log/out.script --timing=/log/out.timing -f -e -c 'echo "hello world"; sleep 10; echo "goodbye world"'
Last login: Tue Jan 21 00:45:14 UTC 2020 on pts/41
Script started, file is /log/out.script
hello world
goodbye world
Script done, file is /log/out.script
그러나 TTY를 제거하면 스크립트는 "-c" 명령을 실행하지 않습니다.
$ docker run --rm --privileged -v $PWD:/log rhel7:7.7 /usr/bin/script /log/out.script --timing=/log/out.timing -f -e -c 'echo "hello world"; sleep 10; echo "goodbye world"'
Last login: Tue Jan 21 00:50:39 UTC 2020 on pts/41
Script started, file is /log/out.script
Script done, file is /log/out.script
$ ls -s out.*
0 out.script 0 out.timing
불행하게도 제가 실행하려는 환경에는 컨테이너에 대한 TTY가 없습니다. 스크립트가 이러한 동작을 하는 이유는 무엇입니까? 해결 방법이 있나요?
답변1
이 script
명령은 터미널 출력을 캡처하도록 설계되었습니다. 터미널이 없으면 작동하지 않습니다.
tee
다음 명령을 확인해 보세요 .
foo 2>&1 | tee /my/output
foo
표준 도커 출력으로 출력을 보냅니다.그리고지정된 파일에 복사합니다.