使用ENTRYPOINT启用容器启动和停止的正确方法

我有一个使用Dockerfile构build的自定义图像。 显然,新的运行正常,但是当我停止容器并重新启动它时,它不会启动并保持在0号出口的状态。

该图像由apache2和symfony web应用程序的一大堆php模块组成。

这是如何Dockerfile结束

 RUN a2enmod rewrite CMD service apache2 restart ENTRYPOINT ["/usr/sbin/apache2ctl"] CMD ["-D", "FOREGROUND"] EXPOSE 80 

我看到容器通常使用docker-entrypoint.sh,但不确定进入的内容和它扮演的angular色。

入口点不应该与你的容器没有任何关系,而不是重新启动。 您的问题很可能在其他地方,您需要查看容器中的日志以进行debugging。 docker diff ...的输出docker diff ...也可能有助于查看在容器文件系统中发生了什么变化。

如果没有定义ENTRYPOINT默认运行CMD 。 如果定义了ENTRYPOINTCMD任何内容都将成为入口点脚本的cli参数。 所以在上面的例子中,它将使用/usr/sbin/apache2ctl -D FOREGROUND启动(或重启)容器。 在docker run命令的容器名称后追加的任何内容都将覆盖CMD的值。 你可以用ENTRYPOINT docker run --entrypoint ...覆盖ENTRYPOINT的值。

有关更多详细信息,请参阅入口点选项上的Docker文档 。