質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

解決済

Spring BootのwarアプリケーションのDockerコンテナにブラウザからアクセスできない

Linkey
Linkey

総合スコア77

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

2回答

0評価

0クリップ

621閲覧

投稿2021/12/28 15:35

編集2021/12/29 03:44

Dockerを勉強しているものです。
Tomcatにwarファイルを配置したイメージからDockerコンテナを起動してwarアプリケーションにアクセスできるかを確認しています。
ブラウザからアクセスすると404が返ってきてしまいます。

/sample1/src/main/java/com/example/sample1/Sample1Application.java

java

package com.example.sample1; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class Sample1Application extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Sample1Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Sample1Application.class); } }

/sample1/src/main/java/com/example/sample1/controller/SampleController.java

java

@RestController public class SampleController { @RequestMapping("/sample") public String home() { return "Hello Docker World"; } @RequestMapping(method= RequestMethod.GET, value= "/sample2") public ModelAndView welcome() { ModelAndView modelAndView= new ModelAndView(); modelAndView.setViewName("sample2.html"); return modelAndView; } }

/sample1/src/main/resources/templates/sample2.html

html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Spring Boot Sample Site</title> </head> <body> <div>Hello World.</div> </body> </html>

pom.xml

xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>sample1</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>sample1</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> <maven.compiler.target>8</maven.compiler.target> <maven.compiler.source>8</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>sample1</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

以下の手順を実施しました。
①warファイルを作成する

②Dockerfileを作成
Dockerfile

FROM tomcat RUN ["apt-get", "update"] RUN ["apt-get", "install", "-y", "vim"] ENV PATH $PATH:/usr/sbin RUN rm -rf /usr/local/tomcat/webapps.dist/ COPY ./sample1.war /usr/local/tomcat/webapps/ CMD chmod +x /usr/local/tomcat/bin/catalina.sh CMD ["catalina.sh", "run"]

③Dockerイメージを作成
docker build -t (Dockerユーザ名)/springboot-sample1:v1 .

④作成したイメージからコンテナを作成し起動する
docker run -it --publish 8080:8080 (Dockerユーザ名)/springboot-sample1:v1

28-Dec-2021 15:18:25.166 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/sample1.war] ~ 28-Dec-2021 15:18:26.137 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/sample1.war] has finished in [971] ms 28-Dec-2021 15:18:26.141 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 28-Dec-2021 15:18:26.153 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [1047] milliseconds

⑤ブラウザからhttp://localhost:8080/sample1/sample、http://localhost:8080/sample1/sample2にアクセスすると404となる

HTTPステータス 404 – 見つかりません。 タイプ ステータスレポート 説明 オリジンサーバーは、ターゲットリソースの現在の表現を見つけられなかったか、またはそれが存在することを開示するつもりはありません。 Apache Tomcat/10.0.14

解決方法を探していますが、未だに解決ができていません。
DockerとTomcatにお詳しい方がいましたらご回答いただけないでしょうか?
よろしくお願いいたします。

--- 追記 ----
Dockerfileのcatalina.sh実行コマンドを以下のように修正して確認
CMD ["sh", "/usr/local/tomcat/bin/catalina.sh", "run"]

Dockerイメージを作り直してから以下のコマンドでイメージからコンテナを作成
docker container run -it -p 8080:8080 --name test (Dockerユーザ名)/springboot-sample1:v1 /bin/bash

資材の配置状態は以下のような状態です。

root@abd9ba51180a:/usr/local/tomcat/webapps# ls -la total 13096 drwxr-xr-x 1 root root 4096 Dec 29 01:45 . drwxr-xr-x 1 root root 4096 Dec 22 17:10 .. drwxr-x--- 4 root root 4096 Dec 29 01:45 sample1 -rwxr-xr-x 1 root root 13391545 Dec 29 01:43 sample1.war

/usr/local/tomcat/webapps/sample1

root@abd9ba51180a:/usr/local/tomcat/webapps/sample1# ls -la total 20 drwxr-x--- 5 root root 4096 Dec 29 01:52 . drwxr-xr-x 1 root root 4096 Dec 29 01:52 .. drwxr-x--- 3 root root 4096 Dec 29 01:52 META-INF drwxr-x--- 5 root root 4096 Dec 29 01:52 WEB-INF drwxr-x--- 3 root root 4096 Dec 29 01:52 org

orgフォルダの中身を確認。

root@abd9ba51180a:/usr/local/tomcat/webapps/sample1# cd org/ root@abd9ba51180a:/usr/local/tomcat/webapps/sample1/org# ls -la total 12 drwxr-x--- 3 root root 4096 Dec 29 03:12 . drwxr-x--- 5 root root 4096 Dec 29 03:12 .. drwxr-x--- 3 root root 4096 Dec 29 03:12 springframework root@cd66d6f2186c:/usr/local/tomcat/webapps/sample1/org# root@cd66d6f2186c:/usr/local/tomcat/webapps/sample1/org# cd springframework/ root@cd66d6f2186c:/usr/local/tomcat/webapps/sample1/org/springframework# ls -la total 12 drwxr-x--- 3 root root 4096 Dec 29 03:12 . drwxr-x--- 3 root root 4096 Dec 29 03:12 .. drwxr-x--- 3 root root 4096 Dec 29 03:12 boot root@abd9ba51180a:/usr/local/tomcat/webapps/sample1/org/springframework# root@abd9ba51180a:/usr/local/tomcat/webapps/sample1/org/springframework# cd boot/ root@abd9ba51180a:/usr/local/tomcat/webapps/sample1/org/springframework/boot# ls -la total 12 drwxr-x--- 3 root root 4096 Dec 29 03:12 . drwxr-x--- 3 root root 4096 Dec 29 03:12 .. drwxr-x--- 7 root root 4096 Dec 29 03:12 loader root@abd9ba51180a:/usr/local/tomcat/webapps/sample1/org/springframework/boot# cd loader root@abd9ba51180a:/usr/local/tomcat/webapps/sample1/org/springframework/boot/loader# ls -la total 124 drwxr-x--- 7 root root 4096 Dec 29 03:12 . drwxr-x--- 3 root root 4096 Dec 29 03:12 .. -rw-r----- 1 root root 5871 Feb 1 1980 ClassPathIndexFile.class -rw-r----- 1 root root 6806 Feb 1 1980 ExecutableArchiveLauncher.class -rw-r----- 1 root root 3966 Feb 1 1980 JarLauncher.class -rw-r----- 1 root root 1483 Feb 1 1980 'LaunchedURLClassLoader$DefinePackageCallType.class' -rw-r----- 1 root root 1535 Feb 1 1980 'LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class' -rw-r----- 1 root root 11154 Feb 1 1980 LaunchedURLClassLoader.class -rw-r----- 1 root root 5932 Feb 1 1980 Launcher.class -rw-r----- 1 root root 1536 Feb 1 1980 MainMethodRunner.class -rw-r----- 1 root root 266 Feb 1 1980 'PropertiesLauncher$1.class' -rw-r----- 1 root root 1484 Feb 1 1980 'PropertiesLauncher$ArchiveEntryFilter.class' -rw-r----- 1 root root 8128 Feb 1 1980 'PropertiesLauncher$ClassPathArchives.class' -rw-r----- 1 root root 1953 Feb 1 1980 'PropertiesLauncher$PrefixMatchingArchiveFilter.class' -rw-r----- 1 root root 18267 Feb 1 1980 PropertiesLauncher.class -rw-r----- 1 root root 1750 Feb 1 1980 WarLauncher.class drwxr-x--- 2 root root 4096 Dec 29 03:12 archive drwxr-x--- 2 root root 4096 Dec 29 03:12 data drwxr-x--- 2 root root 4096 Dec 29 03:12 jar drwxr-x--- 2 root root 4096 Dec 29 03:12 jarmode drwxr-x--- 2 root root 4096 Dec 29 03:12 util

curlコマンドでアクセス確認をするがTomcatの404が返却されてしまう

root@abd9ba51180a:/usr/local/tomcat/webapps/sample1# curl http://localhost:8080/sample1/sample/ <!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} ~ <h3>Apache Tomcat/10.0.14</h3></body></html>

コンテナの環境変数は以下のようになっています。

root@abd9ba51180a:/# printenv HOSTNAME=abd9ba51180a JAVA_HOME=/usr/local/openjdk-8 GPG_KEYS=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX PWD=/usr/local/tomcat/webapps TOMCAT_SHA512=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX TOMCAT_MAJOR=10 HOME=/root LANG=C.UTF-8 TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib TERM=xterm CATALINA_HOME=/usr/local/tomcat SHLVL=1 LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib PATH=/usr/local/tomcat/bin:/usr/local/openjdk-8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/sbin TOMCAT_VERSION=10.0.14 JAVA_VERSION=8u312 _=/usr/bin/printenv OLDPWD=/usr/local/tomcat

ローカル環境(Spring Tool Suite4)ではページが表示できます。
イメージ説明
イメージ説明

orgフォルダが悪さをしているように見えますが、どうしてそのフォルダが出来てしまったのか分からず、解決方法は調査中です。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。