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

时间:2017-03-30 15:20:22

标签: linux docker upstart ratchet docker-container

我试图使用upStart(Run php script as daemon process)来学习这个教程,但是当我收到错误'startserver: unrecognized service'

时遇到了一些障碍

以下是一些显示我尝试过的图片

enter image description here

enter image description here

控制台底部是错误所在的位置。我还证明我的文件在/ 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,如图所示。

1 个答案:

答案 0 :(得分:1)

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

但是,更一般地说,您可以运行所需的进程并使用docker run命令的选项处理在前台或后台运行。在此示例中,您的Docker命令(或CMD中的Dockerfile)可以只是php -f /var/www/callcenter/livesite/bin/startwebsocketserver.php。然后,使用-d选项运行容器,它将在后台运行。您可以使用docker attach附加到docker logs或仅使用* {margin: 0; padding: 0; } body { background-image: url(http://wallpaperpulse.com/img/460475.jpg); background-repeat: no-repeat; background-position: right top; margin-right: 200px; background-attachment: fixed; } .pagina { position: relative; margin-top: 30px; padding-top: 30px; font-family: Helvetica, Arial, sans-serif; } .form1 { float: left; padding: 50px; } .form2 { float: right; padding: 50px; } .uitleg { font-size: 20px; } .border { margin-top: 0px; margin-right: 5%; margin-bottom: auto; margin-left: 5%; width: auto; font-size: 16px; line-height: 22px; background: #ffffe6; padding-top: 20px; border-radius: 25px; padding-left: 20px; padding-right: 20px; padding-bottom: 20px; border: 4px solid black; } .submit {background-color: #333399; border: 1px solid black; padding: 4px; font-size: 15px; font-weight: bold; border-radius: 5px; color: #ffffff; } .submit:hover { color: #ffffff; background-color: #000000; } .uitleg { margin-bottom: 100px; font-size: 20px; } 观看输出。

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