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 эта служба не инициализируется, как в полной виртуальной машине.