使用Docker容器部署spring boot项目
Dockerfile文件内容如下
FROM openjdk:8-jre-alpine
#第一步将apk源替换为国内阿里源。没有第一步将下载难产
RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.6/main/\nhttps://mirrors.aliyun.com/alpine/v3.6/community/' > /etc/apk/repositories \
&& set -xe \
&& apk --no-cache add ttf-dejavu fontconfig
#创建文件夹
RUN mkdir -p /work
workdir /work
ARG JAR_FILE=app.jar
copY ${JAR_FILE} app.jar
EXPOSE 80
ENV TZ=Asia/Shanghai JAVA_OPTS="-xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
CMD java -jar app.jar $JAVA_OPTS
使用build命令生成镜像并运行
docker build -t app .
docker run -d -p 8080:8080 --name app app
在Docker容器启动Arthas
docker exec -it a05430507a7d /bin/sh
wget https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
遇到问题:Can not find java process. Try to run
jps command lists the instrumented Java HotSpot VMs on the target system.
jre-alpine默认没有安装jps,无法通过jps查找java进程
直接指定进程号:java -jar arthas-boot.jar 1
再次遇到问题:Exception in thread "main" java.lang.IllegalArgumentException: Can not find tools.jar under java home: /usr/lib/jvm/java-1.8-openjdk/jre, please try to start arthas-boot with full path java. Such as /opt/jdk/bin/java -jar arthas-boot.jar
因为jre-alpine中没有tools.jar文件
找一个linux版本java中的tools.jar文件,拷贝到容器中docker cp /data/tools.jar ac69a820acf6d71://usr/lib/jvm/java-1.8-openjdk/lib
再次启动arthasjava -jar arthas-boot.jar 1
遇到问题:com.sun.tools.attach.AttachNotSupportedException: Unable to get pid of LinuxThreads manager thread
因为Docker与Open JDK之间存在bug,java应用做为进程pid值为1时,会出现这个问题
解决方式:
- 在Dockerfile中引入tini,由它管理进程
ENV TZ=Asia/Shanghai JAVA_OPTS="-xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
RUN apk --update --no-cache add tini
ENTRYPOINT ["tini"]
CMD java -jar app.jar $JAVA_OPTS
- 从linux版本的jre/lib中,拷贝tools.jar到容器中
docker build -t app .
docker run -d -p 8080:8080 --name app app
docker exec -it a05430507a7d /bin/sh
wget https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
docker cp /data/tools.jar ac69a820acf6d71://usr/lib/jvm/java-1.8-openjdk/lib
docker exec -it ac69a820acf6d71 /bin/sh
wget https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
相关文章:
Alpine镜像中执行jstack、arthas等命令提示Unable to get pid of LinuxThreads manager thread
在Docker中使用Arthas诊断
在docker中使用arthas
原文地址:https://www.jb51.cc/wenti/3280446.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。