在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 。