Docker 在容器启动时运行命令

时间:2021-04-01 10:06:04

标签: php laravel docker dockerfile

我有一个 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 错误并且我的服务变得无法访问。

我做错了什么?

1 个答案:

答案 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 $@

但是,我建议的是,如果它们是不同类型的工作负载,请在单独的容器中运行它们。如果后台处理任务崩溃,没有人重启。如果将其作为单独的容器运行,则可以使用系统重新启动它。