Dockerを勉強しているものです。
Tomcatにwarファイルを配置したイメージからDockerコンテナを起動してwarアプリケーションにアクセスできるかを確認しています。
ブラウザからアクセスすると404が返ってきてしまいます。
/sample1/src/main/java/com/example/sample1/Sample1Application.java
java
1package com.example.sample1; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5import org.springframework.boot.builder.SpringApplicationBuilder; 6import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 7 8@SpringBootApplication 9public class Sample1Application extends SpringBootServletInitializer { 10 11 public static void main(String[] args) { 12 SpringApplication.run(Sample1Application.class, args); 13 } 14 15 @Override 16 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 17 return builder.sources(Sample1Application.class); 18 } 19}
/sample1/src/main/java/com/example/sample1/controller/SampleController.java
java
1@RestController 2public class SampleController { 3 @RequestMapping("/sample") 4 public String home() { 5 return "Hello Docker World"; 6 } 7 8 @RequestMapping(method= RequestMethod.GET, value= "/sample2") 9 public ModelAndView welcome() { 10 ModelAndView modelAndView= new ModelAndView(); 11 modelAndView.setViewName("sample2.html"); 12 return modelAndView; 13 } 14}
/sample1/src/main/resources/templates/sample2.html
html
1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>Spring Boot Sample Site</title> 6</head> 7<body> 8 <div>Hello World.</div> 9</body> 10</html>
pom.xml
xml
1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.6.1</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>sample1</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <packaging>war</packaging> 15 <name>sample1</name> 16 <description>Demo project for Spring Boot</description> 17 <properties> 18 <java.version>17</java.version> 19 <maven.compiler.target>8</maven.compiler.target> 20 <maven.compiler.source>8</maven.compiler.source> 21 </properties> 22 <dependencies> 23 <dependency> 24 <groupId>org.springframework.boot</groupId> 25 <artifactId>spring-boot-starter</artifactId> 26 </dependency> 27 <dependency> 28 <groupId>org.springframework.boot</groupId> 29 <artifactId>spring-boot-starter-web</artifactId> 30 </dependency> 31 <dependency> 32 <groupId>org.springframework.boot</groupId> 33 <artifactId>spring-boot-starter-thymeleaf</artifactId> 34 </dependency> 35 <dependency> 36 <groupId>org.springframework.boot</groupId> 37 <artifactId>spring-boot-starter-test</artifactId> 38 <scope>test</scope> 39 </dependency> 40 <dependency> 41 <groupId>org.springframework.boot</groupId> 42 <artifactId>spring-boot-starter-tomcat</artifactId> 43 <scope>provided</scope> 44 </dependency> 45 </dependencies> 46 47 <build> 48 <finalName>sample1</finalName> 49 <plugins> 50 <plugin> 51 <groupId>org.springframework.boot</groupId> 52 <artifactId>spring-boot-maven-plugin</artifactId> 53 </plugin> 54 </plugins> 55 </build> 56 57</project> 58
以下の手順を実施しました。
①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フォルダが悪さをしているように見えますが、どうしてそのフォルダが出来てしまったのか分からず、解決方法は調査中です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。