提出问题:测试Tomcat本地连接时出现curl: (56) Recv failure: Connection reset by peer
测试环境:
- Linux
- centos 7
- jdk1.8.0_291
- apache-tomcat-9.0.50
目录结构:
当前Dockerfile配置如下:
---为了更快测试省略了添加vim命令的步骤
FROM centos
MAINTAINER wangzhen<2957782929@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD apache-tomcat-9.0.50.tar.gz /usr/local/
ADD jdk-8u291-linux-aarch64.tar.gz /usr/local/
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_291
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.50
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.50
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.50/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.50/bin/logs/catalina.out
问题分析:
构建镜像——>创建容器——>测试连接
[root@wangzhen tomcat]# docker build -t tomcat-test .
[root@wangzhen tomcat]# docker run -d -p 9093:8080 --name tomcat-test -v /home/yyds7/build/tomcat/test:/usr/local/apache-tomcat-9.0.50/webapps/test -v /home/yyds7/build/tomcat/logs:/usr/local/apache-tomcat-9.0.50/logs tomcat-test
7a15ef657b7a5731e7edb90c7a43f322652eb2360ebebc354204b508d19f769f
[root@wangzhen tomcat]# curl localhost:9093
curl: (56) Recv failure: Connection reset by peer
出现报错curl: (56) Recv failure: Connection reset by peer
首先CRRL+P+Q退出容器并打印docker日志查看报错原因
[root@wangzhen tomcat]# docker logs 7a15ef657b7a5731e
Tomcat started.
tail: cannot open '/usr/local/apache-tomcat-9.0.50/bin/logs/catalina.out'
for reading: No such file or directory
日志显示找不到/usr/local/apache-tomcat-9.0.50/bin/logs/catalina.out路径
重点一:检查Dockerfile中tail-F日志查看命令的路径是否正确
经检查Dockerfile中该路径所指定的catalina.out文件并不存在,正确路径应为
/usr/local/apache-tomcat-9.0.50logs/catalina.out 在Dockerfile对应配置中去除/bin目录
重新测试运行
重新创建镜像与容器后进入容器测试java环境是否配置成功
[root@2823c2fb16fb local]# java -version
bash: /usr/local/jdk1.8.0_291/bin/java: cannot execute binary file: Exec format error
测试发现环境变量配置成功但java文件却无法执行,这是我遇到的第二个坑
重点二:检查导入的jdk压缩包是否正确
这里我首次测试是上传的压缩包为jdk-8u291-linux-aarch64.tar.gz
而我们当前的Linux环境无法解析aarch64的jdk
正确该导入的包为jdk-8u291-linux-x64.tar.gz:
Oracle官网下载地址,要仔细核对文件名
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html#license-lightbox
更换jdk版本之后测试:
[root@wangzhen tomcat]# docker exec -it aa154ac081ed /bin/bash
[root@aa154ac081ed local]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
测试成功!
本地连接测试
[root@wangzhen tomcat]# curl localhost:9092
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/9.0.50</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head>
测试成功!
其他诸如数据卷挂载路径是否匹配,防火墙、远程安全组端口是否开启等问题由于未进行测试所以不再赘述。。。如果你们出现上述情景相似的问题希望对你们有所帮助!