无法在 docker 中以守护程序模式运行 puma



我有一个rails5应用程序,并使用Puma作为Web服务。在正常环境中部署它没问题,但在带有守护程序模式的 docker 中部署它时失败。我将列出我能做什么和我不能做什么,如下所示:

能:

rails s没有码头工人

没有码头工人的puma

没有码头工人的puma --daemon

puma -C config/puma.rb没有 docker # 其中设置守护程序:true

puma在码头工人

不能:

Docker中的"Puma --Daemon">

puma -C config/puma.rbdocker 中设置守护程序:true


结论是我无法使用守护程序模式在 docker 中运行 puma,当我使用docker-compose up命令时,它会返回:

彪马以单模式开始...

  • 版本 3.8.2(红宝石 2.4.0-p0(,代号:时髦蝾螈
  • 最小线程数: 5, 最大线程数: 5
  • 环境:生产
  • 守护进程...
  • website_1以代码 0 退出

没有任何其他信息。

那么,它到底发生了什么?

Docker 容器运行单个进程。该过程完成后,容器将退出。知道了这一点,让我们来看看puma --daemon选项的作用。

彪马的帮助输出说:

-d, --daemon 将服务器守护进程到后台

当你这样做时,彪马正在将自己分叉到后台。此时,父进程已完成并退出。这是Docker知道的实际过程。由于此过程已完成并退出,因此容器将退出。

要在容器中运行 Puma,您需要在没有守护程序选项的情况下在前台运行。

编辑:我在 https://www.jstorimer.com/blogs/workingwithcode/7766093-daemon-processes-in-ruby 中找到了关于Process.daemon方法如何在Ruby(Puma在 https://github.com/puma/puma/blob/f5f23aaac7aaccff1b6b138d93dd4b1755ebf1c2/lib/puma/daemon_ext.rb 使用(中工作的很好的解释。

最新更新