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

Linux 如何在后台作为docker容器中的守护进程启动php服务器,linux,docker,upstart,ratchet,docker-container,Linux,Docker,Upstart,Ratchet,Docker Container,我试图使用upStart()来学习教程,但是当我遇到错误时遇到了一些障碍'startserver:unrecognized service' 这里有一些图片来展示我的尝试 控制台底部是错误所在的位置。我还证明了我的文件在/etc/init中,应该在docker容器中。我使用docker exec-it draftandpermit\u web\u 1 bash登录 我遗漏了什么吗? 其他参考数据: startserver.conf # Info description "Start Serv

我试图使用upStart()来学习教程,但是当我遇到错误时遇到了一些障碍
'startserver:unrecognized service'

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

控制台底部是错误所在的位置。我还证明了我的文件在/etc/init中,应该在docker容器中。我使用docker exec-it draftandpermit\u web\u 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系统,也不是运行传统init系统而没有一些漏洞的系统。在Docker容器中运行的第一个进程将是PID 1。这可能是一个主管(如supervisord、s6、dumb init)

但是,更一般地说,您可以只运行所需的进程,并使用
docker run
命令的选项在前台或后台处理运行。在本例中,Docker命令(或
Dockerfile
中的
CMD
)可以是
php-f/var/www/callcenter/livesite/bin/startwebsocketserver.php
。然后,使用
-d
选项运行容器,它将在后台运行。您可以使用
docker-attach
附加到它,也可以使用
docker-logs
查看输出


如果您确实需要使用某种进程管理器(例如,当您需要在容器中运行多个进程时),那么我将开始考虑Docker init选项。我提到了一些,还有更多。Upstart不会在容器内工作。

“以执事的身份运行”和docker是一个警告信号:docker需要运行某些东西,如果您在后台运行,docker会说:嗯,没有进程,所以我可以退出。为什么要将其作为守护进程运行?我不想将docker作为守护进程运行,而是在docker中的后台进程。我的意思是,您不应该在docker中运行后台进程,而是尝试在docker容器中使用upstart来启动我的php服务。如果您的命令退出,Docker将停止。您可能不应该运行troufh upstart,只需将您的php命令作为docker命令来执行?我不能这样做,因为如果我关闭terminal窗口,php服务器的进程将停止当前我正在使用docker compose和-d选项来启动容器。然后,我以同样的方式在代码中添加音量。你是说run命令也有一个-d选项吗?如果是这样的话,那肯定可以。我甚至没有想到,如果我使用-d运行,我将不得不尝试它。我如何停止服务器以重新启动它?查找
docker stop
docker kill
,和
docker rm-f
,感谢您的响应,但是,这将杀死整个docker容器,如果我只想杀死容器中运行的php服务器进程,该怎么办?