Tag: Java

在Docker容器中运行时,JVM不能映射保留的内存

我似乎无法在我的服务器上的Docker容器中运行Java。 即使发出java -version ,我也会得到以下错误。 root@86088d679103:/# java -version OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000035ce1000000, 2555904, 1) failed; error='Operation not permitted' (errno=1) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 2555904 bytes for committing reserved memory. # An error report file with more […]

两个容器与Java之间的Docker通信

我没有在任何post上find我的答案。 我在容器上使用PHP下的项目容器,工作正常。 我想链接在另一个容器上启动的Java。 我使用“java:8”图像configuration像这样: engine: build: ./docker/engine/ volumes: – ".:/home/docker:rw" – "./docker/engine/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro" links: – "db:db" – "java:java" working_dir: "/home/docker" java: image: java:8 tty: true ports: – "999:999" 在我的dockerPHP容器(调用“引擎”),我有这个环境variables。 JAVA_1_ENV_CA_CERTIFICATES_JAVA_VERSION=20140324 JAVA_1_ENV_JAVA_DEBIAN_VERSION=8u72-b15-1~bpo8+1 JAVA_1_ENV_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 JAVA_1_ENV_JAVA_VERSION=8u72 JAVA_1_ENV_LANG=C.UTF-8 JAVA_1_NAME=/recetteetudiant_engine_1/java_1 JAVA_1_PORT=tcp://172.17.0.3:999 JAVA_1_PORT_999_TCP=tcp://172.17.0.3:999 JAVA_1_PORT_999_TCP_ADDR=172.17.0.3 JAVA_1_PORT_999_TCP_PORT=999 JAVA_1_PORT_999_TCP_PROTO=tcp JAVA_ENV_CA_CERTIFICATES_JAVA_VERSION=20140324 JAVA_ENV_JAVA_DEBIAN_VERSION=8u72-b15-1~bpo8+1 JAVA_ENV_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 JAVA_ENV_JAVA_VERSION=8u72 JAVA_ENV_LANG=C.UTF-8 JAVA_NAME=/recetteetudiant_engine_1/java JAVA_PORT=tcp://172.17.0.3:999 JAVA_PORT_999_TCP=tcp://172.17.0.3:999 JAVA_PORT_999_TCP_ADDR=172.17.0.3 JAVA_PORT_999_TCP_PORT=999 JAVA_PORT_999_TCP_PROTO=tcp RECETTEETUDIANT_JAVA_1_ENV_CA_CERTIFICATES_JAVA_VERSION=20140324 RECETTEETUDIANT_JAVA_1_ENV_JAVA_DEBIAN_VERSION=8u72-b15-1~bpo8+1 RECETTEETUDIANT_JAVA_1_ENV_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 RECETTEETUDIANT_JAVA_1_ENV_JAVA_VERSION=8u72 RECETTEETUDIANT_JAVA_1_ENV_LANG=C.UTF-8 […]

是否有可能使用docker与jrebel或dcevm

我一直在我的开发环境中使用docker几个星期,这是相当不错的,我不必担心configuration,我也不需要运行一个完整的虚拟机来运行一个应用服务器(在我的情况下是JBoss)。 不过我似乎已经回到了过去的编译,部署,等待,testing。 现在问题是,有没有办法使用诸如jrebel或dcevm等工具来加速呢? 还有,这个问题是否有意义呢?

Docker中的HBase 1.2.1独立无法连接

我想连接到Docker中独立运行的HBase,使用Java和HBase API 我使用这个代码来连接: Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "163.172.142.199"); config.set("hbase.zookeeper.property.clientPort","2181"); HBaseAdmin.checkHBaseAvailable(config); 这是我的/ etc / hosts文件 127.0.0.1 localhost XXX.XXX.XXX.XXX hbase-srv 这里是我的docker(名为hbase-srv)的/ etc / hosts文件, XXX.XXX.XXX.XXX hbase-srv 有了这个configuration,我得到一个连接拒绝错误: INFO | Initiating client connection, connectString=163.172.142.199:2181 sessionTimeout=90000 watcher=hconnection-0x6aba2b860x0, quorum=163.172.142.199:2181, baseZNode=/hbase INFO | Opening socket connection to server 163.172.142.199/163.172.142.199:2181. Will not attempt to authenticate using SASL (unknown error) INFO | […]

无法在app.jar中运行Docker镜像 – 没有主清单属性

无法运行构build的Docker镜像。 当我运行命令 docker run -p 8080:8080 -t {image prefix name}/{image name} 我收到消息"no main manifest attribute, in app.jar" 使用docker-maven-plugin,并尝试显式调用main类的maven-assembly-plugin。 docker version Boot2Docker 1.7.0

针对Docker和DC / OS的JVM优化

我正在将一个裸机Java应用程序(jar jdk8)移动到Docker容器和DC / OS。 我在docker上注意到一个奇怪的模式,我们将-XMX设置为32位,并分配一个36位的docker集装箱。 每隔几个小时左右,应用程序就会在旧的gen mem分配中激增,并且在尝试执行堆转储时,GC将陷入循环(最大CPU)。 有什么优化或者我可以用来看看为什么在这个1-5秒的时间间隔里,我们的速度如此之快? 是否有任何我可能需要知道与Docker和JVM的陷阱? 我们正在使用默认的GC

dockerfile的内容来运行glassfish服务器,并从git仓库部署特定的应用程序

我正在尝试使用glassfish 4.1服务器部署我的java ee应用程序,并且我想将其部署为Docker容器。 因此,我想编写一个正确的docker来下载/启动一个glassfish服务器,然后使用相应的GIT存储库部署我的应用程序。 目前,我能够使用以下Dockerfile构build一个启动glassfish服务器的Docker容器: FROM java:8-jdk ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 ENV GLASSFISH_HOME /usr/local/glassfish4 ENV PATH $PATH:$JAVA_HOME/bin:$GLASSFISH_HOME/bin RUN apt-get update && \ apt-get install -y curl unzip zip inotify-tools && \ rm -rf /var/lib/apt/lists/* RUN curl -L -o /tmp/glassfish-4.1.zip http://download.java.net/glassfish/4.1/release/glassfish-4.1.zip && \ unzip /tmp/glassfish-4.1.zip -d /usr/local && \ rm -f /tmp/glassfish-4.1.zip EXPOSE 8080 4848 8181 WORKDIR […]

使用maven docker插件在maven版本上提交并保存图像

我正在用docker实现一个基于java的微服务。 尽pipe我对Java和Maven很熟悉,但对于Docker来说,我并不是那么喜欢。 该服务将有工作得到一个文件,parsing它的内容,并写入到MongoDB。 之后,服务不需要,直到下一次导入。 解决scheme应该只在每次调用时使用一个文件,并在执行maven版本时进行版本控制。 用法应该是这样的: import.sh file-to-be-imported.xyz Docker最终只需要运行时,而不是开发。 因此,我认为一个执行脚本,就像Docker运行参数一样。 在maven发行版中,我想在testing运行后执行以下“特殊function”: 在目标生成脂肪jar 生成更新后的导入脚本,其目标名称为jar(.jar)(在发布时更新),以便导入脚本 更新版本到新的快照版本(默认使用Maven发布插件) 更新容器到新版本(我猜Docker提交必须用于那个) 提交更新的容器 存储更新的容器到一个图像(不知何故与docker保存,我想) 我想使用它包含的jar对容器进行版本化,因为对实现的更改可能会更改运行时环境或使用情况。 哪个maven插件适合该用例? 我怎样才能改变我的POM用于给定的插件的用例。 我怎样才能从脚本文件加载(以前导出)最新的版本容器? Docker Hub不是我们的select。 我们将用jenkins的目标文件夹将最近的脚本捆绑出来,解决图像的部署问题。 就像之前所说的那样,只要将一个文件名传递给jar的main方法就可以了,这个方法会处理所有的东西,直到导入完成。 没有涉及或需要的应用服务器。

Java项目的Docker镜像

我想做一个Java项目的docker形象。 我首先创build了一个目录,并在其中创build了一个docker.txt文件。 这些文件包含这个 FROM java:8 # Install maven RUN apt-get update RUN apt-get install -y maven WORKDIR /home/mmt/CouchBaseClient/CB-RestAPI/CouchBaseThinClient # Prepare by downloading dependencies ADD pom.xml /home/mmt/CouchBaseClient/CB-RestAPI/CouchBaseThinClient/pom.xml RUN ["mvn", "dependency:resolve"] RUN ["mvn", "verify"] # Adding source, compile and package into a fat jar ADD src /home/mmt/CouchBaseClient/CB-RestAPI/CouchBaseThinClient/src RUN ["mvn", "package"] EXPOSE 4567 CMD ["/usr/lib/jvm/java-8-openjdk-amd64/bin/java", "-jar", "target/sparkexample-jar-with-dependencies.jar"] 然后我在terminal运行下面​​的命令 […]

如何构build一个Java应用程序的docker容器

我想要做的是为我的Java应用程序构build一个docker镜像,但是对于大多数编译语言来说,下面的考虑应该是真实的。 问题 在我的构build服务器上,我想为我的应用程序生成一个docker镜像作为交付物。 为此,我必须使用一些构build工具(通常是Gradle,Maven或Ant)来编译应用程序,然后将创build的JAR文件添加到泊坞窗图像中。 因为我希望Docker镜像只执行JAR文件,所以我将从已经安装了Java的基础镜像开始。 有三种方法可以做到这一点: 让构build工具控制过程 在这种情况下,我的构build工具控制整个过程。 所以它准备了JAR文件,在创buildJAR之后,它会调用Docker来创build映像。 这是因为事先创build了JAR,而Docker可能忘记了创buildJAR所需的构build过程。 但是我的Dockerfile不再是独立的。 它取决于在Docker之外发生的步骤。 在我的Dockerfile中,我将有一个COPY或ADD语句,它应该将JAR文件复制到图像中。 当事先未创buildjar时,这个语句会失败。 所以只是执行Dockerfile可能不起作用。 如果您想要使用DockerHub上的自动构buildfunction来构build使用当前Dockerfile的服务,就会成为一个问题。 让Docker控制构build 在这种情况下,创build映像所需的所有步骤都会添加到Dockerfile中,以便通过执行Docker构build来创build映像。 这种方法的主要问题是没有办法添加到Dockerfile命令,这些命令应该在创build的docker镜像之外执行。 这意味着我必须将我的源代码和构build工具添加到泊坞窗图像中,并在图像中构build我的JAR文件。 这将导致我的图像比它必须是由于所有添加的文件在运行时将是不必要的。 这也会为我的图片添加额外的图层。 编辑: 正如@ adrian-mouat指出,如果我要添加源,build立应用程序并删除一个RUN语句中的源,我可以避免添加不必要的文件和图层到Docker镜像。 这将意味着创造一些疯狂的链式命令。 两个独立的版本 在这种情况下,我们将构build分为两部分:首先,使用构build工具创buildJAR文件,并将其上传到存储库(Maven或Ivy存储库)。 然后,我们触发一个单独的Docker构build,它只是从存储库中添加JAR文件。 结论 在我看来,更好的方法是让构build工具控制过程 。 这将导致一个干净的docker形象,因为图像是我们想要传递这是重要的。 为了避免有一个潜在的不工作的Dockerfile应该被创build作为构build的一部分。 所以没有人会意外地使用它来开始一个破碎的构build。 但是这不允许我与DockerHub集成。 题 有没有另一种方法我失踪?