【问题标题】:Dockerfile CMD does not start serviceDockerfile CMD 不启动服务
【发布时间】:2018-01-03 00:28:48
【问题描述】:

我有一个包含以下命令的 Dockerfile:

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

不幸的是最后:

Exited (0) 19 seconds ago

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

【问题讨论】:

  • 运行sudo docker run -p 8080:8080 -it tomcat_demo(删除-d选项)并显示结果输出。

标签: tomcat docker dockerfile alpine


【解决方案1】:

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

解决这个问题的一个简单方法是在启动 Tomcat 后无限休眠:

CMD catalina.sh start; sleep inf

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多