我试图用作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。脚本出现这种行为的原因是什么?有办法解决吗?
答案1
该script
命令旨在捕获终端输出。没有终端,它就无法工作。
您可能想查看tee
命令:
foo 2>&1 | tee /my/output
将把 的输出发送foo
到标准 docker 输出和将其复制到指定文件中。