docker使用tomcat
原创
©著作权归作者所有:来自51CTO博客作者chushiyunaaa的原创作品,请联系作者获取转载授权,否则将追究法律责任
拉取镜像并启动
搜索并拉取镜像:
docker search tomcat
docker pull tomcat
创建并启动一个容器:
docker run -d -p 8080:8080 --name tomcat_web --restart=always tomcat # -d 后台运行容器,并返回容器id
查看容器是否启动,并记录id:
docker ps # docker ps会显示运行中的容器,这里id是 3464a0ec25d0
本地访问看看效果(浏览器输入localhost:8080) :
curl localhost:8080 # 如果是命令行,用curl访问网址
竟然报错: HTTP Status 404 – 未找到
404问题处理
原因分析
是因为webapps是默认目录,但是它是空的,webapps.dist目录里面有实际的内容。
解决方案
进入容器内部:
docker exec -it 3464a0ec25d0 /bin/bash # -it表示以交互模式 /bin/bash 表示用什么交互
查看下:
ls webapps; # 空的
ls webapps.dist; # 这里面才有ROOT等内容
ok,确实是这里的问题:
mv webapps webapps.bak; # 空的丢掉,容器运行中不支持rm,所以mv吧
mv webapps.dist webapps; # 换成对的
不用重启,再访问试试:
curl localhost:8080 # 返回index.html的一堆标签,成功
本地搞定了,外网访问发现失败:无法访问此网站
外网访问失败问题处理
分析
很有可能是没有开启IP转发功能,linux默认不开启这个功能,但是使用路由或代理,需要开启这个功能。
解决方案
查看ip转发状态(这2条命令都行):
sysctl net.ipv4.ip_forward # 0表示未开启
cat /proc/sys/net/ipv4/ip_forward #
如果是0,那么设置为1 (这2条命令都行):
sysctl -w net.ipv4.ip_forward=1 # 设置为1,表示开启
echo 1 > /proc/sys/net/ipv4/ip_forward #
发现可以外网访问了。