tomcat7 не запускается внутри контейнера Ubuntu Docker

в первоначальное положение

в Ubuntu (14.04 / 14.10) a выполняются следующие команды:

apt-get update && apt-get install tomcat7
service tomcat7 start

С одной стороны, я попробовал это в VirtualBox VM и tomcat7 startet, как и ожидалось:

vagrant init hashicorp/precise32
vagrant up

С другой стороны, я попробовал это внутри контейнера Docker, начал, как показано здесь:

sudo docker run -it --name tomcattest ubuntu bash

проблема

здесь сервис tomcat7 старт выдает [сбой]. Тем не менее tomcat работает, но / var / log / tomcat7 / catalina.вон!--20--> говорит следующее:

Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common/classes], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/common], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server/classes], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/server], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared/classes], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [/usr/share/tomcat7/shared], exists: [false], isDirectory: [false], canRead: [false]
Apr 16, 2015 5:52:40 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Apr 16, 2015 5:52:40 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 514 ms
Apr 16, 2015 5:52:41 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Apr 16, 2015 5:52:41 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.52 (Ubuntu)
Apr 16, 2015 5:52:41 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT
Apr 16, 2015 5:52:42 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Apr 16, 2015 5:52:42 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1150 ms

объяснение искали

может ли кто-нибудь exlain другое поведение и сказать мне, можно ли установить tomcat7 простым способом через apt-попасть внутрь контейнера docker без предупреждений?

2 ответов


решение

сценарий запуска tomcat нуждается в некоторых специальных привилегиях. Конкретный он должен проверить все запущенные процессы, чтобы убедиться, что он работает. Вы можете предоставить контейнеру Docker следующие привилегии, чтобы сценарий запуска tomcat вышел с успехом:

sudo docker run --cap-add SYS_PTRACE -it ubuntu bash

важным параметром является --cap-добавить SYS_PTRACE, все другие варианты могут различаться. Существует (по крайней мере, один) вопрос, обсуждающий эту проблему на docker github:

https://github.com/docker/docker/issues/6800

последующие проблемы

тем не менее я не нашел способа установить эту привилегию для сборки docker изображения. Моя конечная цель-запустить сборку docker, которая выполняет Ansible playbook внутри. Сборка просто терпит неудачу из-за запуска службы, которую я не буду вынимать из playbook. Я проведу дальнейшие исследования, но возможные решения добро пожаловать.


в этой статье сообщает о той же ошибке (для Tomcat8, но она должна применяться и для Tomcat7):

Я понятия не имею, почему, но кажется, Tomcat 8 на Ubuntu не настроен каким-либо значимым образом. Все доступно, но нам нужны некоторые символические ссылки здесь и там, а также создание каталога temp. Это переводится в следующую инструкцию в Dockerfile:

RUN ln -s /var/lib/tomcat8/common $CATALINA_HOME/common && \
    ln -s /var/lib/tomcat8/server $CATALINA_HOME/server && \
    ln -s /var/lib/tomcat8/shared $CATALINA_HOME/shared && \
    ln -s /etc/tomcat8 $CATALINA_HOME/conf && \
    mkdir $CATALINA_HOME/temp

но фактическая причина, вероятно, в этот вопрос

CATALINA_BASE et al. только получить набор в /etc/init.d/tomcat8.
В образе docker эта служба не инициализируется, как в полной виртуальной машине.