如何在 Docker 容器中调试多个进程 运行?
How to debug multiple processes running in a Docker container?
我是 运行 一个 Docker 容器中的多进程应用程序实例,每个进程 运行 作为一个简单的守护进程。目前我无法调试容器中出现的任何运行时错误,因为 docker attach
经常挂起(并产生交错打印语句),而且 tmux
和 screen
似乎都无法正常运行在容器中。此外,将每个单独进程的标准输出重定向到日志文件,如下所示:
python myfile.py 1>> mylogfile 2>&1 &
根本不起作用,因为我只在日志文件中看到警告。一个理想的解决方案是让 tmux
工作。您如何调试容器中的进程?
不要运行一个容器中的多个进程
出于您概述的所有原因。
使用监督
在 Docker 的早期,"don't run multiple processes!" 并不是什么大规则。 Supervisord 是推荐的类似 initd 的工具,用于在一个容器中处理多个服务。它可以尝试同时监视两者,并且可以正确处理日志记录。
使用docker exec
调试
docker exec [-it] <container> <command>
允许您在 运行ning 容器上 运行 一个额外的命令。用它来获得 shell 并探索。
我是 运行 一个 Docker 容器中的多进程应用程序实例,每个进程 运行 作为一个简单的守护进程。目前我无法调试容器中出现的任何运行时错误,因为 docker attach
经常挂起(并产生交错打印语句),而且 tmux
和 screen
似乎都无法正常运行在容器中。此外,将每个单独进程的标准输出重定向到日志文件,如下所示:
python myfile.py 1>> mylogfile 2>&1 &
根本不起作用,因为我只在日志文件中看到警告。一个理想的解决方案是让 tmux
工作。您如何调试容器中的进程?
不要运行一个容器中的多个进程
出于您概述的所有原因。
使用监督
在 Docker 的早期,"don't run multiple processes!" 并不是什么大规则。 Supervisord 是推荐的类似 initd 的工具,用于在一个容器中处理多个服务。它可以尝试同时监视两者,并且可以正确处理日志记录。
使用docker exec
调试
docker exec [-it] <container> <command>
允许您在 运行ning 容器上 运行 一个额外的命令。用它来获得 shell 并探索。