我有一个 docker 容器,我需要为它运行以下命令
php /var/www/html/artisan queue:work &
它启动一个工作进程来寻找并执行它们。
我可以通过在容器运行时执行 exec -it 来运行它。
但是我需要使用 Dockerfile 来完成它,这样当我的容器重新部署时,它会自动启动。我试过了
RUN php /var/www/html/artisan queue:work
CMD ["php","/var/www/html/artisan","queue:work"]
ENTRYPOINT ["php","/var/www/html/artisan","queue:work"]
当然是分开的。但它们都不起作用。在 CMD 和 ENTRYPOINT 的情况下,我的容器开始发出 502 错误并且我的服务变得无法访问。
我做错了什么?
答案 0 :(得分:2)
您可以通过多种方式做到这一点。
您可以编写一个 shell 脚本,先启动后台进程,然后再启动您的 API。
CMD ["./start_server.sh"]
./start_server.sh
的内容
#!/bin/bash
php /var/www/html/artisan queue:work &
exec php-server-serving-api
您也可以通过 docker 入口点 shell 脚本执行此操作
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["php-server-serving-api"]
./docker-entrypoint.sh
的内容
#!/bin/bash
php /var/www/html/artisan queue:work &
exec $@
但是,我建议的是,如果它们是不同类型的工作负载,请在单独的容器中运行它们。如果后台处理任务崩溃,没有人重启。如果将其作为单独的容器运行,则可以使用系统重新启动它。