首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile CMD未启动服务

Dockerfile CMD未启动服务
EN

Stack Overflow用户
提问于 2018-01-03 08:28:49
回答 1查看 2.9K关注 0票数 1

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

代码语言:javascript
复制
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

你能帮我弄清楚为什么这项服务不可用吗?我怎样才能让它可用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-03 11:35:20

您需要安排Tomcat (或其他进程)在前台运行。catalina.sh start命令是为使用遗留的init系统而设计的,它会自动将Tomcat放到后台。从Docker的角度来看,看起来您的命令已经完成,所以容器被清理干净了。

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

代码语言:javascript
复制
CMD catalina.sh start; sleep inf

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

代码语言:javascript
复制
CMD ["catalina.sh", "run"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48069676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档