2015-03-22 26 views
36

Tôi khá mới đối với Tomcat và Docker - vì vậy tôi có thể thiếu một Tomcat cơ bản ở đâu đó trong câu hỏi này.Triển khai Java webapp để Tomcat 8 chạy trong vùng chứa Docker

Điều tôi đang cố gắng làm là tạo vùng chứa Docker chạy một dịch vụ web SpringBoot Restful chỉ trả về một số dữ liệu tĩnh. Đây là tất cả chạy trên OSX vì vậy tôi đang sử dụng Boot2Docker là tốt.

Tôi đã viết Dockerfile của riêng tôi để xây dựng container rằng ứng dụng của tôi chạy trong:

FROM tomcat:8.0.20-jre8 

RUN mkdir /usr/local/tomcat/webapps/myapp 

COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp/ 

Dockerfile này hoạt động tốt và tôi có thể bắt đầu các container từ các hình ảnh được tạo ra.

docker build -t myapp . 

docker run -it --rm -p 8888:8080 myapp 

Vùng chứa này bắt đầu chính xác và không xuất hiện lỗi và hiển thị thông báo cho biết ứng dụng của tôi đã được triển khai.

22-Mar-2015 23:07:21.217 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 
Deploying web application directory /usr/local/tomcat/webapps/myapp 

Vùng chứa cũng đã sao chép myapp.war vào đường dẫn được mô tả trong Dockerfile. Hơn nữa, tôi có thể điều hướng đến trang mặc định của Tomcat để xác nhận rằng Tomcat đang chạy, tôi cũng có thể nhấn tất cả các ví dụ, v.v.

Để khắc phục sự cố, khi tôi điều hướng đến http://192.168.59.103:8888/myapp/getData Tôi nhận được 404. Tôi không thể tìm ra lý do. Tôi có thiếu một cái gì đó liên quan đến một triển khai .war để Tomcat?

+0

Bạn nhận địa chỉ IP từ đâu? –

+0

Đó là máy được gán cho máy ảo Boot2Docker của tôi. Nhấn vào IP đó: cổng không có/myapp hiển thị trang Tomcat mặc định. – Chris

+0

Tôi là một anh chàng Linux nên hành vi có thể khác nhau nhưng hãy thử truy cập localhost: 8080 thay thế. –

Trả lời

43

Bạn cố gắng sao chép chiến tranh vào một thư mục con dưới ứng dụng web, điều đó sai. Tệp chiến tranh phải được sao chép đơn giản vào thư mục webapps.

Tháo lệnh mkdir, và thay thế các bản sao như thế này:

COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp.war 

Tomcat sẽ trích chiến tranh.

4

Tomcat sẽ trích xuất chiến tranh chỉ được sao chép vào thư mục webapp. Thay đổi DockerFile như sau

FROM tomcat:8.0.20-jre8 
COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp.war 

Bạn có thể cần phải truy cập vào url như sau, trừ khi bạn đã xác định các webroot

http://192.168.59.103:8888/myapp/getData

4

Có một oneliner cho thế này.

Bạn chỉ có thể chạy,

docker run -v /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat 

này sẽ sao chép các tập tin chiến tranh để webapps thư mục và được ứng dụng của bạn chạy trong thời gian không.

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