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

标签 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,如图所示。

最佳答案

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 不会在容器内工作。

关于linux - 如何在后台启动 php 服务器作为 docker 容器中的守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43121978/

相关文章:

linux - Fontello 在 Azure 中的 Ubuntu Server VM 上运行,但无法在浏览器中查看

Java - 我有一个库(.a/.so)和 header (.h),如何使用Java调用它们的函数?

php - 流明环境变量为什么过时(或不匹配?)

django - 带有Upstart和Nginx的Gunicorn和Django

java - 如何从 Java 读取 Windows 和 Linux 上的文件

amazon-web-services - 无法将大型 Docker 镜像上传到 AWS ECR

docker - 如何解决 docker 中的 "Can' t 将键与值分开

logging - 启用 Upstart 日志输出

java - Upstart java应用程序看到CPU使用率很高

Python subprocess.Popen "OSError: [Errno 12] Cannot allocate memory"