如何在 docker 入口点启动以下服务

How to start below services in docker Entrypoint

我想在容器 运行 时启动以下服务。

sudo service celeryd start
sudo service celerybeat start 
service php7.0-fpm start 
service rsyslog start 

当前以下命令无法运行 AWS ECS。并抛出一些错误。

ENTRYPOINT sudo service celeryd start 
&& sudo service celerybeat start 
&& service php7.0-fpm start 
&& service rsyslog start && bash

请教我怎么做

提前致谢。

您尝试作为入口点执行的命令是一个 bash 表达式,因此它们必须在 bash 终端内执行:

ENTRYPOINT ["/bin/bash", "-c", "sudo service celeryd start && sudo service celerybeat start && sudo service php7.0-fpm start && sudo service rsyslog start && tail -f /dev/null"]

此外,您的最后一个命令是 bash,因此容器将在执行入口点后立即结束。你应该提供一个不结束的命令

我不推荐整体设计,因为您是 运行 单个容器中的多个应用程序。如果任何一项服务启动失败,您没有错误处理或反馈。也就是说,可以通过使用在没有输入时不会退出的命令来解决您当前的问题。

ENTRYPOINT service celeryd start \
 && service celerybeat start \
 && service php7.0-fpm start \
 && service rsyslog start \
 && tail -f /dev/null

将所有命令放入 start.sh 文件并授予执行权限,在构建 docker 图像

时将该文件复制到 docker 图像

在 CMD ["./start.sh"]

下写入 docker 文件