在 docker 中无法 运行 puma 处于守护进程模式
Can't run puma in daemon mode in docker
我有一个 rails5 应用程序并使用 puma 作为它的网络服务。正常环境下部署没问题,docker守护进程部署就失败了。我将列出我可以做什么和不能做什么如下:
可以:
rails s
没有 docker
puma
没有 docker
puma --daemon
没有 docker
puma -C config/puma.rb
without docker # in which set daemon: true
puma
在 docker
不能:
docker
中的`puma --daemon'
puma -C config/puma.rb
in docker in which set daemon: true
结论是我不能在 docker 中使用守护程序模式 运行 puma,当我使用 docker-compose up
命令时 returns:
Puma starting in single mode...
- Version 3.8.2 (ruby 2.4.0-p0), codename: Sassy Salamander
- Min threads: 5, max threads: 5
- Environment: production
- Daemonizing...
- website_1 exited with code 0
没有任何其他信息。
那么,到底发生了什么?
Docker 容器 运行 单个进程。当该过程完成时,容器退出。了解了这一点,让我们来看看 puma --daemon
选项的作用。
Puma 的帮助输出显示:
-d, --daemon Daemonize the server into the background
当您执行此操作时,Puma 会将自己分叉到后台。此时父进程完成并退出。这是 Docker 知道的实际过程。由于此过程完成并退出,因此容器退出。
要在容器中 运行 Puma,您需要在没有守护进程选项的情况下在前台 运行。
编辑:我找到了 Process.daemon
方法如何在 Ruby 中工作的很好的解释(Puma 在 https://github.com/puma/puma/blob/f5f23aaac7aaccff1b6b138d93dd4b1755ebf1c2/lib/puma/daemon_ext.rb) in https://www.jstorimer.com/blogs/workingwithcode/7766093-daemon-processes-in-ruby.
中使用的方法)
我有一个 rails5 应用程序并使用 puma 作为它的网络服务。正常环境下部署没问题,docker守护进程部署就失败了。我将列出我可以做什么和不能做什么如下:
可以:
rails s
没有 docker
puma
没有 docker
puma --daemon
没有 docker
puma -C config/puma.rb
without docker # in which set daemon: true
puma
在 docker
不能:
docker
中的`puma --daemon'puma -C config/puma.rb
in docker in which set daemon: true
结论是我不能在 docker 中使用守护程序模式 运行 puma,当我使用 docker-compose up
命令时 returns:
Puma starting in single mode...
- Version 3.8.2 (ruby 2.4.0-p0), codename: Sassy Salamander
- Min threads: 5, max threads: 5
- Environment: production
- Daemonizing...
- website_1 exited with code 0
没有任何其他信息。
那么,到底发生了什么?
Docker 容器 运行 单个进程。当该过程完成时,容器退出。了解了这一点,让我们来看看 puma --daemon
选项的作用。
Puma 的帮助输出显示:
-d, --daemon Daemonize the server into the background
当您执行此操作时,Puma 会将自己分叉到后台。此时父进程完成并退出。这是 Docker 知道的实际过程。由于此过程完成并退出,因此容器退出。
要在容器中 运行 Puma,您需要在没有守护进程选项的情况下在前台 运行。
编辑:我找到了 Process.daemon
方法如何在 Ruby 中工作的很好的解释(Puma 在 https://github.com/puma/puma/blob/f5f23aaac7aaccff1b6b138d93dd4b1755ebf1c2/lib/puma/daemon_ext.rb) in https://www.jstorimer.com/blogs/workingwithcode/7766093-daemon-processes-in-ruby.