如何在后台启动 php 服务器作为 docker 容器中的守护进程

How do I start a php server in the background as a daemon in a docker container

我试图使用 upStart (Run php script as daemon process) 遵循这里的教程,但是当我收到错误 'startserver: unrecognized service'

时,我 运行 遇到了一些障碍

这里有一些图片展示了我的尝试

控制台底部是错误所在。我还证明我的文件在 /etc/init 中,它应该在 docker 容器中。我使用 docker exec -it draftandpermit_web_1 bash

登录

我是不是漏掉了什么?

其他参考资料:

startserver.conf

# Info
description "Start Server"
author      "Joseph Astrahan"

# Events
start on startup
stop on shutdown

# Automatically respawn
respawn
respawn limit 20 5

# Run the script!
# Note, in this example, if your PHP script returns
# the string "ERROR", the daemon will stop itself.
script
    [ $(exec /usr/bin/php -f /var/www/callcenter/livesite/bin/startwebsocketserver.php) = 'ERROR' ] && ( stop; exit 1; )
end script

我要么像你在图片中看到的那样手动激活它,要么使用我的便捷脚本

echo "Copying startserver.conf to /etc/init"
docker exec -it draftandpermit_web_1 bash -c "cd /app/docker; cp -f startserver.conf /etc/init/"

echo "Stopping & Starting the WebSocket & HTTP Server"
docker exec -it draftandpermit_web_1 bash -c "service startserver stop"
docker exec -it draftandpermit_web_1 bash -c "service startserver start"

请记住文件所在的路径是正确的,因为我手动进入容器查看 /etc/init,如图所示。

Docker 既不是 init 系统,也不是 运行 没有一些 hack 的传统 init 系统。 运行 在 Docker 容器中的第一个进程将是 PID 1。这可能是一个主管(如 supervisord、s6、dumb-init)。

但是,更一般地说,您可以 运行 您想要的进程并使用 docker run 命令的选项在前台或后台处理 运行ning。在此示例中,您的 Docker 命令(或 Dockerfile 中的 CMD)可以只是 php -f /var/www/callcenter/livesite/bin/startwebsocketserver.php。然后,运行 您的带有 -d 选项的容器,它将在后台 运行。您可以使用 docker attach 附加到它,或者只使用 docker logs.

观察输出

如果您确实需要使用某种进程主管(例如,当您需要在容器中有多个进程 运行ning 时),那么我会开始寻找 Docker初始化选项在那里。我提到了几个,还有更多。 Upstart 无法在容器内工作。