Tag: Java

Docker上的Apache Kafka – 在数百个游泳池后停止

我在运行Kafka时遇到了一个问题,即在Java应用程序中用作事件存储。 卡夫卡版本:0.10.1.0 Java lib版本:0.10.1.0 Docker版本:当前边缘(17.06.0-ce,build 02c1d87) (稳定发布时的问题) Java 1.8 Docker组合版本:3.3 卡夫卡在147次请求后突然停下来。 任何configuration,docker设置,主机等的变化不会导致不同的结果。 Docker撰写文件: version: '3.3' services: queue: image: spotify/kafka ports: – "9092:9092" – "2181:2181" environment: – ADVERTISED_HOST=queue – ADVERTISED_PORT=9092 # kafka-manager: # image: sheepkiller/kafka-manager # ports: # – "9000:9000" # environment: # – ZK_HOSTS=queue:2181 # depends_on: # – queue # links: # – queue postgresql: […]

RabbitMQ,docker,单队列,多个消费者

我们在我们的系统中使用了Docker,Spring和RabbitMq。 我是AMQP的新手,我试图弄清楚交换,队列,绑定和连接是如何在我们的系统中工作的。 我们有多个dockerized应用程序。 简而言之,当应用程序启动的时候,他们每个人都开始听同一个队列,我不明白他们怎么能期望收到相同的消息。 在stackoverflow有一些类似的问题,给我的印象是,我们目前的系统可能有缺陷。 更详细地说: Docker容器启动时,不同容器中的多个应用程序使用RabbitAdmin declare the same exchange: rabbitAdmin.declareExchange(exchange) declare the same queue: rabbitAdmin.declareQueue(queue) bind those together: rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(exhange).with("theSameKey"); 他们这样做是因为他们想听同样的信息。 据我所知,只有一个dockerized程序pipe理创build交换和队列,其余的尝试,但没有任何效果。 之后,这些应用程序中的每一个都会为队列创build并启动SimpleMessageContainers: simpleMessageContainer.setMessageListener(messageListener) simpleMessageContainer.addQueueNames(queue.getName()) simpleMessageContainer.start() 使用rabbitmqctl和rabbitmq的web界面,我可以看到单个队列在不同的渠道上有多个消费者,对应不同的docker容器。 是不是这样,messageListener驻留在应用程序中,但是当调用addQueueNames时,RabbitMq为代理中的队列创build一个Consumer,然后这个Consumer通过与应用程序本地messageListener的连接转发消息? 由于不同Docker容器中的多个应用程序都这样做,因此同一队列中有多个Consumers,就像我在rabbitmqctl中看到的一样。 我不明白的是,RabbitMq不是以循环的方式将消息传递到队列中的消息队列,所以只有一个docker应用程序会收到它? 这些交stream是直接的,话题types,没有扇出交stream。 如果所有dockerized应用程序想要接收相同的消息,那么不应该为自己的队列名称使用相同的exhance为相同的exhance创build一个自己的队列,但使用相同的路由密钥? 我没有看到目前的实施可能正常工作。

Docker容器主机名

我想在启动期间设置docker容器主机名(HOSTNAME env var),这是在dockerfile的ENTRYPOINT中指定的.sh脚本: #!/bin/sh export HOSTNAME=something-$(hostname) java $JAVA_OPTS -jar /app.jar 我想要为jvm看到这个新的主机名。 我所得到的就是标准的docker主机名称: / # env HOSTNAME=04dbf311a3be 当我设置主机名手动使用上面的导出上面的容器启动后,一切正常。 一切正在使用组合堆栈文件在群集中运行。 编辑1:我没有这样做在容器build立,但在启动过程中 编辑2:要清楚,我有什么: DOCKER SWARM: CONTAINER1 HOSTNAME=391fa2c7e184 CONTAINER2 HOSTNAME=39123a43242asd4 CONTAINER3 HOSTNAME=123123123123 我想要的是: CONTAINER1 HOSTNAME=APPNAME-391fa2c7e184 CONTAINER2 HOSTNAME=APPNAME-123fa2c7e184 CONTAINER3 HOSTNAME=APPNAME-343fa345e184 并希望这在n-containers的启动过程中被自动设置 我如何尝试做到这一点: 我尝试在容器启动时调用start.sh文件(在dockerfile中指向ENTRYPOINT命令)中设置此项: #!/bin/sh export HOSTNAME=something-$(hostname) java $JAVA_OPTS -jar /app.jar 没有效果,HOSTNAME没有被改变

无法连接到运行在计算引擎上的docker容器上的mongodb

使用docker-compose我启动了两个docker容器,一个是包含mongodb的第二个包含java应用程序的google vm (compute engine) 。 该应用程序很好地连接到数据库,我可以通过URL http://myvm:8080查看结果。 现在,当我想要在本地启动相同的应用程序连接到相同的数据库时,出现连接错误。 我把bind_ip属性设置为0.0.0.0来连接远程服务器,我在日志中看到这个configuration已经被使用了,但是不起作用。 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "0.0.0.0", port: 27017 } } 虚拟机的所有端口和协议都可以访问。 在我尝试在mongodb上连接时发生的错误之下: com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=vm_ip:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused […]

Docker-compose up:连接被拒绝

我正在使用Docker-compose在我的项目中,当我试图在一个项目中连接到我的VBox“本地主机:22000”主机,它会导致exception连接被拒绝 version: '2' services: mongodb: image: mongo ports: – "27017:27017" command: mongod –smallfiles rabbitmq: image: rabbitmq:3.5.3-management ports: – "5672:5672" – "15672:15672" broker: image: java:openjdk-8u91-jdk depends_on: – mongodb – rabbitmq working_dir: /app volumes: – ./blockchain-rabbitmq/target/:/app command: java -jar /app/blockchain-rabbitmq-0.0.1.jar ports: – "8484:8484" links: – rabbitmq – mongodb environment: SPRING_DATA_MONGODB_URI: mongodb://mongodb/ethereum RABBIT_HOST: rabbitmq SPRING_RABBITMQ_HOST: rabbitmq nfb: image: […]

JRE在Docker中内存不足

我试图build立和0.13.13docker形象类似于这一个。 运行java $JAVA_OPTS -jar sbt-launch.jar (作为构build映像的一个步骤)失败: OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000d3026000, 451256320, 0) failed; error='Out of memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 451256320 bytes for committing reserved memory. 增加-Xmx没有帮助。 我能做些什么来解决这个问题? 这是Dockerfile: https : //github.com/kolov/k8s-stuff/blob/master/scala/Dockerfile

在Docker Swarm上使用Consul的Spring Cloud微服务的方法1.12 ++

我在Spring云生态系统上有几个微服务器,作为configuration服务器和注册服务器,我有Consul。 此外,我有4个节点和3个代理作为服务器模式的Docker Swarm和1个作为每个节点的客户模式的代理代理。 我的问题是什么:我尝试在consul实例上的每个节点上运行Docker容器,例如: docker run -d –name consul -h node1 -p 8500:8500 -p … progrium/consul -server -advertise ${CONSUL_MASTER} -bootstrap-expect 3 并与其他领事代理人一起主要领事: docker run -d –name consul -h node2 -p 8500:8500 -p … progrium/consul -server -advertise $(docker info –format "{{.Swarm.NodeAddr}}") -join ${CONSUL_MASTER} 然后在Docker Swarm中将我的微服务部署为堆栈: docker stack deploy –compose-file docker-compose.yml my_stek 我在每个微服务中的bootstrap.yml是: spring: application: name: service-name […]

如何在java代码中获得docker stats详细信息?

我试图得到我的Java代码docker容器的细节,并成功地得到它。 但是我需要获取Docker容器的CPU和内存使用情况。 在terminal本身,我们可以通过docker stats来检查状态。 但我的问题是如何获得在Java代码中的Docker容器的统计信息?

如何将已经运行服务的Docker中的主机系统的端口绑定到Docker容器端口。

如果我的问题似乎是模糊的,我对领事和docker工人是很新的,所以请耐心等待。 我有多个Web服务运行在他们自己的Docker容器中。 现在我想使用consul(由hashicorp)作为服务发现工具。 Consul代理默认在端口8500上运行。 现在我将在所有docker集装箱运行的主机系统上运行Consul(因为它是一个服务发现工具,我不能让每个集装箱都有自己的领事)以及在docker集装箱中运行的docker服务与8500端口进行交互,在主机系统上运行。 最初我假设使用docker端口转发(-p)将工作,但尝试它后,下面的错误是我得到的 docker: Error response from daemon: driver failed programming external connectivity on endpoint practical_lamarr (dd21827e00a3218f9e090986c09f875a82yurd04b76d8a2528f0bccb854e05a3): Error starting userland proxy: listen tcp 0.0.0.0:8500: bind: address already in use. 有人可以告诉我,如何在主机系统端口上运行的领事被绑定到容器端口。

无法在非root用户上运行Docker上的Maven命令

我正在Docker上构build我的项目(使用docker-maven),需要以非root用户身份执行它。 从官方文档看来,支持以非root身份运行maven( https://github.com/carlossg/docker-maven#running-as-non-root )。 所以我运行以下: sudo docker run -v "$PWD":/var/maven -w /var/maven -ti -u 1000 -e MAVEN_CONFIG=/var/maven maven mvn package -Duser.home=/var/maven $PWD是我的项目根目录。 但是,我总是得到许可相关的问题,如 Error while storing the mojo status: /var/maven/mymodule/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst (Permission denied) 或者如果我运行mvn clean package则无法删除一些文件。 如何以非root身份正确运行该命令?