2015-04-16 14 views
5

Tình hình ban đầutomcat7 thất bại trong việc bắt đầu trong Ubuntu Docker chứa

Trong Ubuntu (14.04/14.10) một chạy các lệnh sau:

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

Một mặt tôi đã cố gắng này trong VirtualBox Khởi động VM và tomcat7 như mong đợi:

vagrant init hashicorp/precise32 
vagrant up 

Mặt khác, tôi đã thử điều này trong vùng chứa Docker, bắt đầu như được hiển thị ở đây:

sudo docker run -it --name tomcattest ubuntu bash 

Vấn đề

Có dịch vụ tomcat7 bắt đầu đầu ra lệnh [thất bại]. Tuy nhiên tomcat đang chạy, nhưng /var/log/tomcat7/catalina.out nói sau đây:

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 

lời giải thích đã tìm kiếm

Có thể ai exlain các hành vi khác nhau và cho tôi biết nếu có thể cài đặt tomcat7 một cách dễ dàng thông qua apt-get bên trong một docker container mà không có cảnh báo?

Trả lời

12

Giải pháp

Các tomcat khởi động kịch bản cần một số ưu đãi đặc biệt. Bê tông cần kiểm tra tất cả các tiến trình đang chạy, để xác minh chính nó đang chạy. Bạn có thể cung cấp cho các thùng chứa Docker sau đặc quyền để làm cho tomcat bắt đầu kịch bản thoát với thành công:

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

Các tùy chọn quan trọng là --cap-thêm SYS_PTRACE, tất cả các tùy chọn khác có thể thay đổi.Có (ít nhất một) là một vấn đề thảo luận về vấn đề này trên Docker github:

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

vấn đề tiếp theo

Tuy nhiên tôi đã tìm thấy không có cách nào để thiết lập đặc quyền này cho việc xây dựng Docker của một hình ảnh. Mục tiêu cuối cùng của tôi là chạy một docker build để thực hiện một playbook Ansible bên trong. Việc xây dựng chỉ thất bại vì dịch vụ bắt đầu, mà tôi sẽ không đưa ra khỏi playbook. Tôi sẽ tiến hành điều tra thêm, nhưng các giải pháp có thể được hoan nghênh.

+0

Đẹp bắt, đầy đủ hơn câu trả lời của tôi. +1 – VonC

+0

@Thomas Steinbach: bạn có tìm cách sửa nó trong chính 'Dockerfile' không? – Arpit

+0

@Arpit - dường như không có đối số dòng lệnh nào cho 'docker run'. Xem [tài liệu] (https://docs.docker.com/engine/reference/commandline/build/) –

1

This article báo cáo lỗi tương tự (ví Tomcat8, nhưng nó sẽ được áp dụng cho Tomcat7 cũng):

Tôi không biết tại sao, nhưng có vẻ như Tomcat 8 trên Ubuntu không được cấu hình trong bất kỳ cách có ý nghĩa. Tất cả mọi thứ có sẵn nhưng chúng ta cần một số liên kết tượng trưng ở đây và ở đó cũng như tạo thư mục tạm thời. Điều này được chuyển vào hướng dẫn sau trong 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 

Nhưng lý do thực tế có lẽ là trong this question

CATALINA_BASE et al. chỉ được đặt trong /etc/init.d/tomcat8.
Trong hình ảnh docker, dịch vụ đó không được khởi tạo như trong một máy ảo đầy đủ.

+1

Đối với những gì tôi đã đọc, "ý nghĩa" của bố cục này là chỉ có một "/ usr/share/tomcat8", nhưng có thể nhiều trường hợp tomcat 8 và một "/ var/lib/tomcat-instance-name " cho mỗi. – Tristan

Các vấn đề liên quan