如何在后台启动一个PHP服务器作为Docker容器中的守护进程

我正在尝试使用upStart( 运行PHP脚本作为守护进程 )跟随教程,但是当我遇到错误'startserver: unrecognized service'时遇到了一些问题,

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

在这里输入图像说明

在这里输入图像说明

在控制台的底部是错误的地方。 我也显示certificate我的文件在/ etc / init中应该在泊坞窗容器中。 我使用docker exec -it draftandpermit_web_1 bashlogin

我错过了什么吗?

其他参考数据:

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" 

请记住,path对于文件的位置是正确的,因为我手动进入容器来查看映像中显示的/ etc / init。

Docker既不是初始化系统,也不会运行传统的init系统而没有一些黑客行为。 您在Docker容器中运行的第一个进程将是PID 1.这可能是一个主pipe(像supervisord,s6,dumb-init)。

然而,更一般的情况是,你可以运行你想要的进程,并使用docker run命令的选项来处理在前台或后台docker run 。 在这个例子中,你的Docker命令(或者Dockerfile CMD )可以是php -f /var/www/callcenter/livesite/bin/startwebsocketserver.php 。 然后,用-d选项运行你的容器,它将在后台运行。 您可以使用docker attach附加到docker attach或者使用docker logs监视输出。

如果你实际上需要使用某种进程pipe理器(比如当你需要在容器中运行多个进程),那么我会开始寻找Docker的init选项。 我提到了一对,还有更多。 新贵不会在一个容器内工作。