(十)Docker安装tomcat

itmahy
itmahy
发布于 2024-01-18 / 49 阅读
0
0

(十)Docker安装tomcat

1. 搜索镜像

docker search tomcat

选择stars最多的。

2. 拉取镜像

docker pull tomcat:8.5

3. 查看镜像

docker images

4. 创建容器

4.1 创建网络

为容器创建单独的网络

# 创建名为 itmahy-tomcat的网络
docker network create itmahy-tomcat
# 查看是否创建成功
docker network ls

4.2 使用 run 命令创建容器

# 执行命令 \放到命令的末端表示连接下一行
docker run \
--name itmahy-tomcat \
--network itmahy-tomcat \
-v /data/docker/tomcat/webapps:/usr/local/tomcat/webapps  \
--privileged=true  \
-p 8088:8080 \
-d \
tomcat:8.5 

# 参数解释
--name : 容器名称的名称为itmahy-tomcat
--network : 4.1创建的网络名称itmahy-tomcat
-v : 数据卷,为了更换tomcat加载项目的方便
--privileged=true 容器中的root会得到宿主机的root权限
-p : 容器中端口8080映射到宿主机的端口为8088
-d : 后台运行,不进入交互式界面
tomcat:8.5表示 镜像名称:版本号,2中下载的镜像

5. 查看容器是否运行

# 查看运行的容器
docker ps
# 查看所有容器
docker ps -a

6. 在浏览器中访问

# 输入以下地址
http://192.168.137.11:8088

上面这个图不是现截的,所以端口号是8080,正确的应该是8088,很明显,报 404 了,下面开始解决。

7. 遇到的问题

7.1 浏览器中访问报404

  • 解决方法一

docker exec -it 容器ID /bin/bash

将 webapps 删除或者修改为其他名称
将 webapps.dist 修改为 webapps
再次访问,就会出现tomcat首页

  • 解决方法二
    根据 -v /data/docker/tomcat/webapps:/usr/local/tomcat/webapps这个参数获得容器数据卷再宿主机中的位置是 /data/docker/tomcat/webapps,在外部找到一个tomcat 的webapps目录下的文件跟目录,上传到 /data/docker/tomcat/webapps这个目录下,就可以正常访问了。

7.2 端口问题

在上面的操作中我没有关闭防火墙,也没有放开8088端口,但是可以直接访问。

  • 原因:

    默认情况下当Docker启动容器映射端口时,会直接在iptables添加规则开启添加端口。而 firewalld 实际上也是在iptables写入规则。因此 firewalld和docker属于是同级的应用,但是firewalld不会去检测 docker 写入的规则,就会导致 docker 可以开启firewalld没有允许的端口。

  • 解决方法:

# 编辑文件
vim /etc/docker/daemon.json
添加下面两行:
{
  ....
  "experimental" : true,
  "iptables": false 
}

添加完成之后,重启docker

systemctl daemon-reload
systemctl restart docker
  • 结果

    再次访问http://192.168.137.11:8088的时候,就会访问不到tomcat了,需要开启 8088 端口之后才能访问

  • firewalld 开启端口

# 打开端口
sudo firewall-cmd \
--zone=public \
--add-port=8088/tcp \ 
--permanent

# 重启防火墙
firewall-cmd --reload
  • 打开端口之后访问就通了


评论