Docker

沒有 tty 腳本不執行命令

  • January 21, 2020

我正在嘗試script用作 docker 容器的入口點,以將該容器中發生的所有內容記錄到已安裝卷上的文件中。如果有 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。腳本以這種方式表現的原因是什麼?有辦法解決嗎?

script命令旨在擷取終端輸出。沒有終端,它就無法工作。

您可能想查看tee命令:

foo 2>&1 | tee /my/output

將輸出發送foo到標準 docker 輸出並將其複製到指定文件。

引用自:https://unix.stackexchange.com/questions/563114