Dockerfile CMD не запускает службу

У меня есть 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

Можете ли вы помочь мне понять, почему служба недоступна и как я могу сделать ее доступной?


person Mark    schedule 03.01.2018    source источник
comment
Запустите sudo docker run -p 8080:8080 -it tomcat_demo (удалив параметр -d) и покажите результат.   -  person BMitch    schedule 03.01.2018


Ответы (1)


Вам нужно организовать работу Tomcat (или другого процесса) на переднем плане. Команда catalina.sh start предназначена для работы с устаревшей системой инициализации и автоматически переводит Tomcat в фоновый режим. С точки зрения Docker, похоже, что ваша команда завершилась, поэтому контейнер очищен.

Простой способ справиться с этим — поставить бесконечный сон после запуска Tomcat:

CMD catalina.sh start; sleep inf

Но лучший способ решить эту проблему — посмотреть на другие параметры, доступные в catalina.sh, например, описанные в этом ответе:

CMD ["catalina.sh", "run"]
person larsks    schedule 03.01.2018