前言

本文介绍在 Docker 中部署 tomcat ,并且发布 war 包。

404 问题

需要注意的是,Docker 中 tomcat 默认的镜像存在生成容器后无法直接访问的问题,也就是部署后会遇到 404,原因是 默认 tomcat 镜像的 /usr/local/tomcat/webapps 文件夹是空的,这个时候需要进入容器把 webapps 删除,然后将 webapps.dist 重新命名为 webapps。
再一个,在容器内部操作都是临时的,对于 tomcat 而言,一种解决方案修改完容器后生成新的镜像,另一个方案是使用文件挂载的方式,将宿主机上的文件夹同步到容器中的文件夹。

操作步骤
拉取最新的 tomcat 镜像

默认下载 latest 版本

docker search tomcat 可以查看更多资源

docker pull tomcat
运行 tomcat 容器

这里需要注意,使用 宿主器端口 8080 : 容器内部端口 8080
对容器命名为 mytomcat

## 例子1
docker run -d -p 8080:8080 --name mytomcat tomcat
## 例子2,--restart=always docker 启动时容器自动启动
docker run -d -p 8088:8080 --name mytomcat --restart=always tomcat

访问 localhost:8080 ,应该会报 404

查看 容器 id

这里查看结果为 afc4d15be3db

docker ps
进入 tomcat 容器
docker exec -it afc4d15be3db /bin/bash
解决 404 问题
rm -rf webapps
mv webapps.dist webapps

提交完毕之后可以访问 localhost:8080

制作成本地镜象 docker ps

为了一劳永逸的解决404问题,我们生成一个没有404问题的镜像,这里命名为 local_tomcat

#  docker commit 容器id 镜像名称
docker commit afc4d15be3db (容器id) local_tomcat
删除 tomcat 容器

刚才的操作只是为了生成一个 没有 404 问题的 tomcat 镜像,所以这个原始的容器可以先删掉了。

Docker rm -f mytomcat
将宿主器文件夹挂载到 tomcat 容器
将待挂载文件夹内容复制到宿主机

由于挂载时,本地文件夹会覆盖容器中文件夹,所以我们需要先把容器中文件夹内容复制到宿主机,注意这里使用的是上面生成的tomcat 镜像 local_tomcat

  • 启动一个local_tomcat的容器
docker run -d -p 8080:8080 --name mytomcat local_tomcat 
  • 将容器中 webapps 夹内容同步到本地一个文件夹——用于后期本地文件夹挂载到docker容器
docker cp 容器id:/usr/local/tomcat/webapps/ /宿主机文件夹路径/dockerfile/tomcat/webapps
  • 再删除这个容器-
docker rm -f mytomcat
再启动-容器挂载宿主机 webapps

docker run -d -p 8080:8080 --name mytomcat -v /宿主机文件夹路径/dockerfile/tomcat/webapps/:/usr/local/tomcat/webapps/:rw -d tomcat

准备 war 包,重启 Docker

准备 war 包,放入 /宿主机文件夹路径/dockerfile/tomcat/webapps/
然后

docker restart mytomcat
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐