在主机上运行良好的管道卡在 docker 容器中

Pipeline which woks perfectly well on host get stuck in docker container

我正在尝试执行以下命令:

tail -n +1 -f  /test/high_scan.log | awk '1,/shutting down/; /shutting down/ { exit }'

在由以下人员创建的 docker 容器中:

docker run -it ubuntu:18.04 bash

想法是在 awk 检测到 关闭 模式时中断管道

它在主机上运行良好,但永远不会在容器内终止。 在这两种情况下,该文件是相同的。 有什么想法吗?

awk 在新鲜的 ubuntu:18.04 Docker 容器中是 mawk。在您的主机系统上,几乎可以肯定是 gawk。如果您在容器中安装 gawk 并改为使用它,那么它将同样有效。

看起来特别的问题是 mawk 块缓冲它的输入,一旦写入过程结束,tail -f 将永远坐着,所以它永远不会读取缓冲区的末尾.因此,作为替代解决方案,如果您愿意继续使用它,可以将 -W interactive 传递给 mawk。