如何调试在Docker容器中运行的多个进程?

时间:2016-03-31 23:46:37

标签: docker containers tmux

我正在Docker容器中运行一个多进程应用程序实例,每个进程都作为一个简单的守护进程运行。我目前无法调试容器中出现的任何运行时错误,因为let config = Realm.Configuration(objectTypes: [MyClass.self, MyOtherClass.self]) let realm = try! Realm(configuration: config) 经常挂起(并生成交错的打印语句),docker attachtmux似乎都无法正常运行在容器中。此外,将每个单独进程的stdout重定向到日志文件,如下所示:

screen

根本不起作用,因为我只在日志文件中看到警告。一个理想的解决方案是让python myfile.py 1>> mylogfile 2>&1 & 工作。如何调试容器中的进程?

1 个答案:

答案 0 :(得分:2)

不要在一个容器中运行多个进程

由于您概述的所有原因。

使用supervisord

在Docker的早期“不要运行多个进程!”这不是一个很重要的规则。 Supervisord是推荐的类似initd的工具,用于在一个容器中处理多个服务。它可以尝试监控两者,它可以正确处理日志记录。

使用ifelse进行调试

with(df1, ave(Day, Day, ID, FUN= function(x) NA^(seq_along(x)==1)*(seq_along(x)-1))) #[1] NA 1 2 NA 1 2 3 NA 1 2 允许您在正在运行的容器上运行额外的命令。用它来获取shell并进行探索。