Tag: Java

在docker中debuggingspring-boot

出于某种原因,我将远程debugging连接到docker中运行的spring-boot应用程序时遇到问题。 我启动Java应用程序: java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar app.jar 对于docker工人,我在docker-compose上公开这些端口: ports: – "8080:8080" – "8000:8000" 但是,debugging器无法在端口8000上连接。当我在本地运行服务器,但不在docker内时,它起作用。 任何想法为什么? Docker ps输出: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0d17e6851807 pocmanager_manager:latest "/bin/sh -c 'java -D 3 seconds ago Up 2 seconds 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp pocmanager_manager_1 35ed2e2c32bc redis:latest "/entrypoint.sh redi 14 seconds ago Up 13 seconds 0.0.0.0:6379->6379/tcp pocmanager_redis_1

从Docker容器中运行的JVM应用程序将日志发送到Graylog的最佳实践是什么?

我使用Graylog作为中央日志logging服务器,并使用gelf log4j2-appender将日志消息发送到graylog。 这工作正常。 现在我创build了我的应用程序的泊坞窗图像,我能够运行我的软件作为docker集装箱。 使用docker我也login到标准输出(控制台appender)获取应用程序日志到docker(docker logs {containerId})。 现在我问自己,我可以在gelf log4j2-appender上腾出空间,并使用docker log-driver / plugin作为gelf。 (请参阅https://docs.docker.com/engine/admin/logging/overview/ ) 这里最好的做法是什么? 我认为使用docker日志插件会将整个string消息发送到graylog,并且graylog需要从该string中提取元信息(所以我需要在日志消息中提供这个元数据,例如log_level)。 这可能会导致更多的资源消耗在graylog端,也不可能configuration泊坞窗只发送错误消息到graylog。 这导致更多的networkingstream量。 使用log4j2 gelf-appender,我可以在日志消息中提供额外的元数据,而不需要将其包含在主日志消息中,并且在graylog端不需要提取。 也可以通过log_levelconfiguration哪些消息应该发送给graylog。 还是我错了? 什么是最好的解决scheme或每种方式发送日志到graylog的优点和缺点是什么?

Java操场的Gradle任务

我对Docker和Gradle还是个新手,但是我正在尝试设置一个构buildDocker镜像的Gradle构build。 我刚刚完成了一个Dockerfile设置,这个Dockerfile在本地部署并按预期运行了jar。 我有这个在我的build.gradle : buildscript { repositories { mavenCentral() } dependencies { classpath 'se.transmode.gradle:gradle-docker:1.2' } } plugins { id 'com.github.johnrengelman.shadow' version '1.2.3' } apply plugin: 'docker' jar { manifest { attributes 'Main-Class': 'com.myapp.Main' } } task buildDocker(type: Docker, dependsOn: shadowJar) { push = false applicationName = jar.baseName tagVersion = 'latest' dockerfile = file('src/main/docker/Dockerfile') copy { […]

Docker-client Java API:服务器无法响应有效的HTTP响应

pipe理解决了我昨天发布的问题,其中的Java客户端库无法连接到我的守护进程,但现在我有一个新的问题,我无法find任何关于在线信息。 我在Win7 64位上运行Boot2Docker v1.6 Windows安装程序。 我可以运行docker命令就好了。 然后,我从https://github.com/spotify/docker-client中取出最新的Docker-client master分支(v2.7.22),并在Eclipse Java IDE中运行它。 在DefaultDockerClient中,我将DEFAULT_HOST和DEFAULT_PORT更改为Docker似乎使用的值https://docs.docker.com/installation/images/windows-boot2docker-cmd.png (默认值为localhost:2375连接拒绝错误)。 我试着运行下面的命令: final DockerClient docker = DefaultDockerClient.fromEnv().build(); List results = docker.searchImages("ubuntu"); 我的结果是一个Apache错误: Exception in thread "main" com.spotify.docker.client.DockerException: java.util.concurrent.ExecutionException: javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException at com.spotify.docker.client.DefaultDockerClient.propagate(DefaultDockerClient.java:1109) at com.spotify.docker.client.DefaultDockerClient.request(DefaultDockerClient.java:1028) at com.spotify.docker.client.DefaultDockerClient.searchImages(DefaultDockerClient.java:653) at com.spotify.docker.client.main.Test.main(Test.java:28) Caused by: java.util.concurrent.ExecutionException: javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException at jersey.repackaged.com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:306) at jersey.repackaged.com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:293) at jersey.repackaged.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116) at com.spotify.docker.client.DefaultDockerClient.request(DefaultDockerClient.java:1026) … 2 more […]

Docker无法运行Java应用程序

我有以下项目目录结构: myapp/ grails-app/ (its a grails app, derrrr) target/ myapp.jar (built by grails) myapp.yml …其中target/myapp.jar是可执行JAR(实际上是一个运行embedded式Jetty的独立Web应用程序),以及myapp.yml是启动时需要的configuration文件。 这是我的Dockerfile : FROM java:8 MAINTAINER My Name <myname@example.com> WORKDIR / ADD ./target/myapp.jar /myapp.jar ADD ./myapp.yml /myapp.yml EXPOSE 8080 CMD ["java", "-jar myapp.jar myapp.yml"] 然后我用docker build -t myapp .构build图像docker build -t myapp . 。 它build立成功,然后尝试通过docker run myapp运行图像,并得到: Unrecognized option: -jar myapp.jar […]

Docker和Java IDE集成

我将首先说我不是Java开发人员,也不是Docker专家。 为了最大限度地减less前端和后端(在这个具体的情况下,Java)开发人员之间的差距,我开始把一些docker图像与Java和Maven的地方,构build后,我开始一个docker容器与指向Java项目的卷前端开发人员不必担心依赖关系或如何运行后端服务)。 已经在这里,我有一个问题。 我已经看到其他人用内部的实际代码构build一个图像,而不是稍后再附加它,所以最好的情况是什么(如果有的话)? 我已经这样做了,因为我可以将这个图像重用于“每个”项目,并避免构build不同的图像。 为了启动/停止/重新启动Docker容器,我创build了一个脚本来完成所有这些工作,所以我可以对代码进行一些更改,使其重新启动。 它有点作品,我的意思是,我很清楚这不是一个Java开发人员从控制台做这种东西的正常工作stream程。 所以,现在,最重要的问题是,如何将docker与Java IDE集成? 我知道你可以创build自定义的构build/运行命令,但是我也看到,像日志这样的东西不会显示在IDE上。 有人能解释我如何使用Docker + Java IDE? 注意:Maven也用于编译java代码,比如mvn clean install (如果有帮助的话)

Websocket不附加到docker集装箱

我有一个包含OpenJDK8的Docker容器和一个通过websockets提供服务的webapp。 我有一个testing这些ws服务的Java客户端。 他们在docker以外工作良好。 但是当我把我的web应用程序放入docker镜像并运行webapp时,外部testingjava客户端无法连接。 这是错误: Exception in thread "main" java.lang.RuntimeException: java.io.EOFException: XNIO000812: Connection closed unexpectedly at org.nustaq.kontraktor.remoting.websockets.JSR356ClientConnector$WSClientEndpoint.<init>(JSR356ClientConnector.java:104) at org.nustaq.kontraktor.remoting.websockets.JSR356ClientConnector.connect(JSR356ClientConnector.java:73) at org.nustaq.kontraktor.remoting.base.ActorClient.connect(ActorClient.java:72) at org.nustaq.kontraktor.remoting.websockets.WebSocketConnectable.lambda$connect$36(WebSocketConnectable.java:66) 这是我的Dockerfile: FROM alpine:3.4 RUN apk –update add openjdk8 CMD ["/usr/bin/java", "-version"] # This copies to local fat jar inside the image ADD target/quokka-0.1-SNAPSHOT.jar /quokka-0.1-SNAPSHOT.jar ADD storage/*.mmf /storage/ ADD cwift.properties / # What […]

Dockerfile运行可执行文件

我有一个目录,其中包含一个Dockerfile和一个JAR文件foo.jar 。 在Dockerfile我写了以下内容: FROM java:8 EXPOSE 8080 ENTRYPOINT ["java","-jar","foo.jar"] 我通过运行成功地build立了图像 docker build -t foo-example . 然后我尝试通过运行来运行它 docker run -ti –rm -p 8080:8080 foo-example 我得到这个错误: Error: Unable to access jarfile foo.jar 有任何想法吗?

将Maven仓库挂载到Docker

我正在尝试构build一个Java应用程序,并使用docker制作一个包。 这个构build需要一个Maven仓库,我不想在图像中包含它,因为它非常大。 我想尝试使用卷,并将我的本地Maven存储库挂载到图像中的Maven存储库。 我使用apt-get install -y maven为了使maven可用,但是我在$HOME映像中找不到目录.m2 。 我用ls -la $HOME , ls -la和ls -la /rootfindmaven home,但是没有.m2目录。 编辑1: 我有Dockerfile这些行: FROM ubuntu MAINTAINER Zeinab Abbasimazar # Install and configure required packages RUN apt-get update; \ apt-get install -y –no-install-recommends apt-utils; \ apt-get install -y dialog; \ apt-get install -y wget unzip curl maven; \ mkdir $HOME/.m2/; […]