centos8上docker tomcat容器访问报404解决方法

Posted PacosonSWJTU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos8上docker tomcat容器访问报404解决方法相关的知识,希望对你有一定的参考价值。


 

目录

【README】

【1】docker安装tomcat

【2】启动多个tomcat容器


【README】

1.本文记录了 访问docker tomcat容器报404的解决方法;

2.附带安装tomcat步骤;

3.centos8 安装docker,refers2 centos8安装docker_PacosonSWJTU的博客-CSDN博客【README】本文参考了 docker官方文档安装指南, Install Docker Engine on CentOS | Docker DocumentationInstructions for installing Docker Engine on CentOShttps://docs.docker.com/engine/install/centos/【1】安装前的工作1.需要centos7或8上;// 查看centos版本[root@centos204 ~]# uname -r4https://blog.csdn.net/PacosonSWJTU/article/details/120773955


【1】docker安装tomcat

步骤1,搜索 docker tomcat 镜像

docker search tomcat

步骤2,拉取tomcat镜像

docker pull tomcat

步骤3,根据镜像启动tomcat容器

虚拟机端口8888转发到 tomcat容器8080端口;

[root@centos204 tomcat]# docker run -d -p 8888:8080 tomcat
0b1be1a3dcd2e9723343a8b3f3f0bcd1f1a07da38b3090d256132d8320e9add2

步骤4,win10浏览器 访问  http://192.168.163.204:8888/ 报404

 步骤5,查看防火墙

发现什么都没有,即centos8机器上8888端口无法被防火墙隔离了

# 查看防火墙开通网络访问端口列表
[root@centos204 tomcat]#  firewall-cmd --zone=public --list-ports
空
[root@centos204 tomcat]# 

# 查看防火墙状态
[root@centos204 tomcat]#  systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) (thawing) since Fri 2021-10-15 01:02:33 EDT; 9h ago
..............................................

步骤6,开通8888端口的防火墙访问权限

# 开通8888端口
[root@centos204 tomcat]#  firewall-cmd --zone=public --add-port=8888/tcp --permanent         
success
# 查看已开通端口
[root@centos204 tomcat]#  firewall-cmd --zone=public --list-ports                   
空

# 重新加载防火墙规则到内存
[root@centos204 tomcat]# firewall-cmd --reload
success
# 再次查看已开通端口, 已开通 
[root@centos204 tomcat]#  firewall-cmd --zone=public --list-ports
8888/tcp

步骤7,再次访问   http://192.168.163.204:8888/ 还是报404

步骤8,查看tomcat容器部署目录

使用命令: docker exec -it 运行的tomcat容器ID /bin/bash 进入到tomcat的目录

# 查看docker所有容器
[root@centos204 tomcat]# docker ps -a
CONTAINER ID   IMAGE         COMMAND             CREATED          STATUS                    PORTS                                       NAMES
0b1be1a3dcd2   tomcat        "catalina.sh run"   13 minutes ago   Up 13 minutes             0.0.0.0:8888->8080/tcp, :::8888->8080/tcp   modest_heyrovsky
0a5b713c0021   hello-world   "/hello"            24 hours ago     Exited (0) 24 hours ago                                               frosty_turing

# 找出tomcat容器id, 并进入该容器的内存运行目录 
[root@centos204 tomcat]# docker exec -it 0b1be1a3dcd2 /bin/bash
root@0b1be1a3dcd2:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work

# 查看webapps 部署了哪些项目,居然为空
root@0b1be1a3dcd2:/usr/local/tomcat# ls webapps

# 再查看webapps.dist 部署了哪些项目 不为空 
root@0b1be1a3dcd2:/usr/local/tomcat# ls webapps.dist
ROOT  docs  examples  host-manager  manager

很显然, webapps tomcat的部署根目录没有任何内容,所以访问报404; 下面我们 把 webapps.dist 的内容拷贝到 webapps ;

 步骤9,把 webapps.dist 的内容拷贝到 webapps

root@0b1be1a3dcd2:/usr/local/tomcat# cp -r webapps.dist/* webapps/

步骤10,再次访问  http://192.168.163.204:8888/; 成功!

注意:我这里只是测试,所以把 webapps.dist 目录中的内容拷贝到了 webapps 下; 也可以不这样做,把虚拟机上的物理磁盘目录挂载到 tomcat容器部署根目录 webapps,也可以实现部署的目的


【2】启动多个tomcat容器

步骤1,利用tomcat docker镜像启动多个tomat容器

# 利用tomcat镜像启动第2个tomcat容器,外部端口8887 
[root@centos204 tomcat]# docker run -d -p 8887:8080 tomcat 
e7f01a261ee88d18507142c6a09a1548d2fd6f7586aad7281e2b980fb379f306

# 利用tomcat镜像启动第3个tomcat容器,外部端口8886
[root@centos204 tomcat]# docker run -d -p 8886:8080 tomcat 
99e3813639c8defd220950a57cf6a5e744677db407b0dd53832144b9c3a5878c
[root@centos204 tomcat]# 


步骤2,按照管理,开通8887 8886 防火墙权限

[root@centos204 tomcat]# firewall-cmd --zone=public --add-port=8887/tcp --permanent     
success
[root@centos204 tomcat]# firewall-cmd --zone=public --add-port=8886/tcp --permanent 
success
[root@centos204 tomcat]# firewall-cmd --reload
success
[root@centos204 tomcat]# firewall-cmd --zone=public --list-ports
8888/tcp 8887/tcp 8886/tcp
[root@centos204 tomcat]# 

步骤3,把 webapps.dist 目录下的内容拷贝到 webapps

# 查看所有docker 容器
[root@centos204 tomcat]# docker ps -a
CONTAINER ID   IMAGE         COMMAND             CREATED          STATUS                    PORTS                                       NAMES
99e3813639c8   tomcat        "catalina.sh run"   2 minutes ago    Up 2 minutes              0.0.0.0:8886->8080/tcp, :::8886->8080/tcp   naughty_maxwell
e7f01a261ee8   tomcat        "catalina.sh run"   2 minutes ago    Up 2 minutes              0.0.0.0:8887->8080/tcp, :::8887->8080/tcp   beautiful_proskuriakova
0b1be1a3dcd2   tomcat        "catalina.sh run"   28 minutes ago   Up 28 minutes             0.0.0.0:8888->8080/tcp, :::8888->8080/tcp   modest_heyrovsky
0a5b713c0021   hello-world   "/hello"            24 hours ago     Exited (0) 24 hours ago                                               frosty_turing

# 进入tomcat容器目录
[root@centos204 tomcat]# docker exec -it 99e3813639c8 /bin/bash
root@99e3813639c8:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@99e3813639c8:/usr/local/tomcat# ls webapps
ROOT  docs  examples  host-manager  manager

# 进入tomcat容器目录 
[root@centos204 tomcat]# docker exec -it e7f01a261ee8 /bin/bash
root@e7f01a261ee8:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@e7f01a261ee8:/usr/local/tomcat# exit
exit

步骤4, 访问  http://192.168.163.204:8887/ ,      【2】启动多个tomcat容器

 

访问成功;

docker是个好东西,1个tomcat镜像,可以启动3个或多个独立运行的tomcat容器,而不是把这3个tomcat 运行在3台机器上; 这就是虚拟化;

以上是关于centos8上docker tomcat容器访问报404解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Docker:在 Tomcat 镜像构建期间访问 MySQL 容器

Docker 使用 tomcat镜像部署web网站无法访问

docker添加tomcat容器成功无法访问首页

docker添加tomcat容器成功无法访问首页

centos8 安装原生docker

centos8启动docker-mysql8容器