스크립트는 tty 없이 명령을 실행하지 않습니다.

스크립트는 tty 없이 명령을 실행하지 않습니다.

저는 이를 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표준 도커 출력으로 출력을 보냅니다.그리고지정된 파일에 복사합니다.

관련 정보