如果已经关闭防火墙,还出现404问题,那么就确定是tomcat的webapps文件夹下没有东西
- 启动Tomcat容器
docker run -d -p 8888:8080 tomcat
- 1
- 查看已经启动的容器
docker ps
- 1
- 使用8888端口访问Tomcat失败
- 先查看防火墙状况
service firewalld status
- 1
- 出现下图所示代码,表示已经关闭防火墙
- 如果防火墙没关闭,先关闭防火墙
# 关闭防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service
# 启动docker
systemctl start docker
# 重启docker
systemctl restart docker
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 如果防火墙已经关闭但访问tomcat还是失败,那么使用如下命名进入tomcat的目录
docker exec -it a5f02a3e6dde(启动的tomcat容器的容器id) /bin/bash
- 1
- 查看当前文件夹内的所有文件
ls
- 1
- 进入webapps文件夹下,如果显示total 0,我们就需要把webapps.dist中的内容复制到webapps文件夹下
cd webapps
rm -f webapps
cp -r webapps.dist webapps
- 1
- 2
- 3
- 然后查看是否有可运行的容器
docker ps
- 1
- 如果有,启动容器
- 访问ip:主机端口(8888) 即可访问成功
郁闷呀,下面我们进入这个tomcat执行的容器中一看究竟
docker exec -it c9820692a09e /bin/bash
- 1
我们发现有webapps和webapps.dist两个文件,且webapps里面是空的,进入才发现原本应该在webapps文件中的文件都在webapps.dist文件中,(不知道为什么,知道的兄弟欢迎评论留言,谢谢)
问题找到了我们要解决它:将webapps.dist重命名成webapps即可,原来的webapps(空文件)可以删除或者命名成其他的名字
rmdir webapps
mv webapps.dist webapps
- 1
- 2
注: 因为我们是在服务器上记得将映射的宿主端口开放,不然也无法访问到。
这时我们刷新一下浏览器,tomcat首页出现了
虽然这样解决了问题但是不够彻底,因为再另启动一个Tomcat容器时又会出现这样的问题,且容器停止后,下一次再使用镜像生成新的容器时,这个错误还是存在
解决方法:实际上问题的根源是在生成容器的镜像上,只有将镜像修改了,再生成的容器才不会再出现这个问题,所以这里我们要用到上面说的 提交运行时容器成为镜像的命令即
docker commit -a=‘作者’ -m=‘备注’ 运行时容器ID 新镜像名称
此时我们先使用命令ctrl+p+q不退出容器的方式返回到宿主机目录下
我们可以看到我们的镜像文件多了我们刚刚新建的镜像,后期可以使用这个镜像来生成tomcat容器
下面我们把这个新镜像推送到hub服务器和自己的阿里云仓库中