在docker中不能以守护进程运行puma

我有一个rails5应用程序,并使用美洲狮,因为它的networking服务。 可以在正常的环境中部署它,但是在以守护进程模式将其部署到docker时失败。 我会列出我可以做什么,我不能做如下:

能够:

没有docker的rails s

没有docker的puma

puma --daemon没有docker的puma --daemon进程

puma -C config/puma.rb没有docker#其中集守护程序:真

docker工人的puma

不能:

docker中的`puma –daemon'

puma -C config/puma.rb ,其中set守护程序:true


结论是,我不能在守护进程模式下运行美洲狮,当我使用docker-compose up命令时,它返回:

彪马开始在单一模式…

  • 版本3.8.2(ruby 2.4.0-p0),代号:Sassy Salamander
  • 最小线程:5,最大线程:5
  • 环境:生产
  • Daemonizing …
  • 网站1以代码0退出

没有任何其他信息。

那么,这真的发生了什么?

Docker容器运行一个进程。 当这个过程完成时,容器退出。 知道这一点,让我们来看看什么样的puma --daemon选项。

彪马的帮助输出说:

-d, – 守护进程将服务器守护进入后台

当你这样做的时候,彪马正在为自己的背景而努力。 此时父进程完成并退出。 这是Docker知道的实际过程。 由于此过程完成并退出,容器退出。

要在一个容器中运行Puma,您需要在前台运行而不使用守护进程选项。

编辑:我发现一个很好的解释如何在Ruby中的Process.daemon方法(彪马正在使用https://github.com/puma/puma/blob/f5f23aaac7aaccff1b6b138d93dd4b1755ebf1c2/lib/puma/daemon_ext.rb )在https: //www.jstorimer.com/blogs/workingwithcode/7766093-daemon-processes-in-ruby 。