私は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デプロイに関して何か不足していますか?
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を抽出します。
これには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ディレクトリにコピーされ、すぐにアプリが実行されます。
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にアクセスする必要がある場合があります