如何在 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 文件
我想在容器 运行 时启动以下服务。
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 文件