问题
把 Springboot 的 jar 包打进 Docker 镜像后,无法正常启动,而在本地测试可以正常启动。
查看日志,主要有两种报错信息:
(1)关于H2的报错:This is very likely to create a memory leak.
(2)关于Socket:java.net.SocketException: Permission denied
解决过程
针对报错(1),增大JVM启动内存,依然无法解决,不是该问题。所以可能也是由于权限问题引起的。
在 Dockerfile 添加赋权:
RUN chmod 755 -R dataflow-server.jar
结果在 build 镜像的时候报错:
chmod: changing permissions of xxx: Operation not pemitted
解决方案一:
使用 root 用户执行:
USER root
RUN chmod 755 -R dataflow-server.jar
解决方案二:
在打包前赋值, docker 会保留本来的权限。
赋值后,成功启动!