web-dev-qa-db-ja.com

Dockerコンテナで実行されているTomcat 8にJava webappをデプロイする

私はTomcatとDockerにかなり慣れていないので、おそらくこの質問のどこかにTomcatの基本が欠けています。

私がやろうとしているのは、いくつかの静的データを返すだけのSpringBoot Restful Webサービスを実行するDockerコンテナを構築することです。これはすべてOSX上で実行されているため、Boot2Dockerも使用しています。

アプリを実行するコンテナーを作成するために、独自のDockerfileを作成しました。

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は正常に機能し、作成されたイメージからコンテナーを開始できます。

docker build -t myapp .

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

このコンテナは正常に起動し、エラーは出力されず、アプリがデプロイされたことを示すメッセージが表示されます。

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

コンテナには、Dockerfileに記述されているパスにmyapp.warが正しくコピーされています。さらに、Tomcatのデフォルトページに移動して、Tomcatが実行されていることを確認できます。また、すべての例にアクセスできます。

問題に対して、 http://192.168.59.103:8888/myapp/getData に移動すると、404が表示されます。理由はわかりません。 Tomcatへの.warデプロイに関して何か不足していますか?

54
Chris

warファイルをwebappsの下のディレクトリにコピーしようとしています。 warファイルをwebappsディレクトリーにコピーする必要があります。

Mkdirコマンドを削除し、次のようにwarファイルをコピーします。

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

autodeployがオンになっている場合、Tomcatはwarを抽出します。

62
crazyman

これにはonelinerがあります。

単純に実行できますが、

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

これにより、warファイルがwebappsディレクトリにコピーされ、すぐにアプリが実行されます。

17

Tomcatはwebappsディレクトリにコピーされたwarのみを抽出します。 Dockerfileを次のように変更します。

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

Webrootを指定していない限り、以下のようにURLにアクセスする必要がある場合があります

http://192.168.59.103:8888/myapp/getData

7