Tag: spring boot

无法访问jarfile – Elastic Beanstalk上的Docker

我正在尝试将Spring Boot应用程序的Docker镜像部署到AWS Elastic Beanstalk,并在/var/log/eb-activity.log中遇到此错误: Docker容器在启动后意外退出:Docker容器意外退出Wed Jun 22 11:56:25 UTC 2016: 错误:无法访问jarfile /home/packedit/app/packed-it.jar。 检查快照日志的详细信息。 (执行人:: NonZeroExitStatus) 这是使用以下Dockerrun.aws.json的Elastic Beanstalk上的单个容器: { "AWSEBDockerrunVersion": "1", "Image": { "Name": "packedit/packedit-api", "Update": "true" }, "Ports": [ { "ContainerPort": "8080" } ], "Volumes": [ { "HostDirectory": "/var/app/packedit", "ContainerDirectory": "/home/packedit/app" } ], "Logging": "/home/packedit/app/logs" } 这是Dockerfile: FROM java:8 MAINTAINER my@email.com VOLUME /tmp EXPOSE 8080 […]

JVM释放未使用的堆

我有一个运行在Docker容器内的Mule的Springboot应用程序作为一个微服务。 即使闲置也需要700MB。 注意到JVM已经分配了380 MB的堆,这是使用-Xmx参数提供的最大堆。 尽pipe分配了最大堆,但微服务闲置时仅占用大约50 MB的空间。 问题是如何从JVM中释放未使用的内存。 看来,减lessMaxHeapFreeRatio我们可以要求JVM缩小,当有更多的空闲内存比。 然而MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40没有太大的区别,JVM也没有释放内存。 但是,当我使用具有上述两个参数的-Xmn时,JVM按预期释放堆内存。 示例场景见下图。 Java版本8 -Xmn100M -XX:+PrintGCDetails -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -Xmx384M 为什么MinHeapFreeRatio和MaxHeapFreeRatio不能按预期工作? 如果上面的参数是好的,那么-Xmn的后果是什么,应该是什么值? 为了实现从JVM释放内存的任务,还有哪些其他解决scheme?

Spring Boot无法读取Docker中的application.properties

在Docker容器中运行时,Spring Boot不会读取应用程序属性。 我的application.yml server: port: 8080 context-path: /mail custom: greeting: Hello YML Dockerfile FROM java:8-jre VOLUME /tmp COPY ./mail.jar /app/mail.jar RUN sh -c 'touch /app/mail.jar' ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app/mail.jar" ] EXPOSE 8080 还有一个简单的ApplicationController @RestController public class ApplicationController { private final Environment environment; @Autowired public ApplicationController(Environment environment) { this.environment […]

部署到Docker时将外部化Spring引导属性

在我的Spring Boot应用程序中,我希望外部化这些属性以在Docker容器中运行。 首次部署时,应用程序按预期加载和使用当前位于my-server/src/main/resources/application.yml中的属性。 一切正常。 但是,我的问题是,我需要这些属性可以根据需要更新,所以我需要在Docker容器上访问一次application.yml文件。 但是在这一点上,在运行buildDocker任务之前,它不包含在build/docker/ buildDocker build/docker/目录中,所以在第一次部署之后不会被复制或访问。 所以,我所尝试的是将Yaml文件复制到docker docker/ build目录中,将其复制到可访问的目录( /opt/meanwhileinhell/myapp/conf ),并使用spring.config.location属性传递configuration到我的Dockerfile中的jar子: ENTRYPOINT ["java",\ … "-jar", "/app.jar",\ "–spring.config.location=classpath:${configDirectory}"] 看看在Docker容器上运行的命令,我可以看到这是预期的: /app.jar –spring.config.location=classpath:/opt/meanwhileinhell/myapp/conf] 但是,当我更新这个文件中的一个属性并重新启动Docker容器时,它不会接收这些更改。 文件权限是: -rw-r–r– 1 root root 618 Sep 5 13:59 application.yml 该文件指出: 当configuration自定义configuration位置时,除了默认位置之外,还会使用它们。 在默认位置之前search自定义位置。 我似乎无法弄清楚我在做什么错误或误解,但可能更重要的是,这是外部configuration这种types的Docker场景的正确方法?