2015-04-16 4 views
5

исходной ситуацииtomcat7 не запустится внутри Ubuntu Докер контейнера

В Ubuntu (14.04/14.10) а побежал следующие команды:

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

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

vagrant init hashicorp/precise32 
vagrant up 

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

sudo docker run -it --name tomcattest ubuntu bash 

Проблема

Там служба tomcat7 запуска команды выходов [обязательно]. Тем не менее, кот работает, но /var/log/tomcat7/catalina.out говорит следующее:

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-get внутри контейнера докера без предупреждений?

ответ

12

Раствор

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

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

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

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

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

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

+0

Хороший улов, более полный, чем мой ответ. +1 – VonC

+0

@Thomas Steinbach: вы нашли способ исправить его в 'Dockerfile'? – Arpit

+0

@Arpit - похоже, такого аргумента командной строки для 'docker run' еще нет. См. [Документация] (https://docs.docker.com/engine/reference/commandline/build/) –

1

This article сообщает ту же ошибку (для 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 

Но истинная причина, вероятно, в this question

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

+1

Для того, что я читал, «значение» этого макета должно иметь только один «/ usr/share/tomcat8», но, возможно, несколько экземпляров tomcat 8 и один «/ var/lib/tomcat-instance-name " для каждого. – Tristan

Смежные вопросы