在主机上运行良好的管道卡在 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。
我正在尝试执行以下命令:
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。