在 Docker 容器中运行代码时,用户可能会遇到发生 stdout 缓冲的情况,导致输出间歇性刷新而不是出现一代后立即。这种现象可能会因容器的操作系统和代码本身而异。
在一种特殊情况下,在 Docker 容器中运行“procwrap”程序时会出现此问题。当子进程成功执行时,标准输出和日志文件的输出突然出现,表明缓冲了响应。但是,在容器外部运行相同的代码会导致同步输出。
调查和故障排除
初步观察显示该问题与 stdout 缓冲有关。事实证明,修改 Docker 或 Linux 设置(例如使用“stdbuf”)无法有效解决该问题。
解决方案
为了克服这一挑战,对正在容器化的控制台应用程序的源代码。这些修改强制在每次写入操作后立即刷新文件。这确保了数据不会在应用程序内缓冲并实时输出。
其他注意事项
用于解决此问题的具体配置涉及编写的自定义日志记录到“/dev/stdout”并在每次日志写入时触发文件刷新。这使得 Docker 容器可以通过“docker log”命令立即显示消息。
以上是为什么我的 Docker 容器显示间歇性的 stdout 输出?的详细内容。更多信息请关注PHP中文网其他相关文章!