Dockerfile CMD无法启动服务

时间:2018-01-03 00:28:49

标签: tomcat docker dockerfile alpine

我有一个带有以下命令的Dockerfile:

export default new Router({
  routes: [
    /* Other routes */,
    {
      path: "/dialog/:scenario",
      component: DialogPage,
      props: true,
      children:[
        {
          path: "/",
          components: { basicView: ScenarioSelector, advancedView: ScenarioSelector },
          props: { basicView: true, advancedView: true }
        }
      ]
    }
  ]
}

我使用下一个命令创建了图像:

FROM alpine:3.7 ENV CATALINA_HOME /usr/local/tomcat ENV PATH $CATALINA_HOME/bin:$PATH RUN apk update && \ apk add --no-cache openjdk8 && \ apk add --no-cache curl && \ mkdir -p "$CATALINA_HOME" && \ cd /tmp && \ curl -O https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.0.M26/bin/apache-tomcat-9. tar xvzf apache-tomcat-9.0.0.M26.tar.gz -C . && \ mv apache-tomcat-9.0.0.M26/* "$CATALINA_HOME" COPY tomcat-users.xml "$CATALINA_HOME"/conf/ COPY context.xml "$CATALINA_HOME"/webapps/manager/META-INF/ EXPOSE 8080 CMD ["catalina.sh", "start"]

启动我使用过的容器:

sudo docker build --tag tomcat_demo .

不幸的是最后:

sudo docker run -p 8080:8080 -dit tomcat_demo

您能否帮我弄清楚为什么服务不可用以及如何使其可用?

1 个答案:

答案 0 :(得分:1)

您需要安排Tomcat(或其他进程)在前台运行。 catalina.sh start命令旨在与旧版init系统一起使用,并自动将Tomcat置于后台。从Docker的角度来看,看起来您的命令已经完成,因此容器已被清理。

处理此问题的一种简单方法是在启动Tomcat后进行无限睡眠:

CMD catalina.sh start; sleep inf

但更好的解决方法是查看catalina.sh中提供的其他选项,例如this answer中所述:

CMD ["catalina.sh", "run"]