Tag: Java

com.spotify.docker.client.DockerRequestException:请求错误:DELETE unix:// localhost:80 / v1.12 / containers / …:409

我正在开发一个Java应用程序,它使用Google Kubernetes在Apache Tomcat Docker Containers中部署Web工件。 我使用https://github.com/spotify/docker-client来执行Docker镜像和容器处理活动,并使用https://github.com/fabric8io/fabric8/tree/master/components/kubernetes-api Kubernetes相关的function。 在这个应用程序中,我添加了一个function,使用户能够移除用户部署的Web工件。 删除I时, 删除我用来生成所需数量的Pod复制副本的Kubernetes复制控制器 分别删除副本窗格(因为在Java API的相应方法中删除复制控制器时,不会自动删除窗格) 删除掉相应的服务创build 删除对应于已删除的窗格的Docker容器 最后,删除用于部署的Docker镜像 以下代码显示了已执行的删除function: public boolean remove(String tenant, String appName) throws WebArtifactHandlerException { String componentName = generateKubernetesComponentName(tenant, appName); final int singleImageIndex = 0; try { if (replicationControllerHandler.getReplicationController(componentName) != null) { String dockerImage = replicationControllerHandler.getReplicationController(componentName).getSpec() .getTemplate().getSpec().getContainers().get(singleImageIndex).getImage(); List<String> containerIds = containerHandler.getRunningContainerIdsByImage(dockerImage); replicationControllerHandler.deleteReplicationController(componentName); podHandler.deleteReplicaPods(tenant, appName); serviceHandler.deleteService(componentName); […]

作为Docker容器运行时,Java Spring不会与Consul通信

我正试图解决我认为是运行微服务的常见用例。 在这种情况下,我正在用一个spring的云应用程序testing领事。 我试图用两种不同的方式来testing领事。 其中第一个运行在Docker容器中,另一个运行在Docker主机上。 然后,我试图启动一个spring的云容器,将与任何一个领事的例子。 当Spring云应用程序作为docker容器运行时,我无法使Spring云应用程序与领事谈话。 当Spring云应用程序以主机联网模式运行时,它可以parsinglocalhost端口,但是如果我希望运行多个图像实例,这不是一个可接受的解决scheme。 下面显示了将两个服务作为容器运行时,我的泊坞窗撰写文件的示例。 在这里,我试图通过环境variables来设置春季云中的领队uri,但却无法使用各种configuration使其工作。 如果任何人都可以指出这些function一起工作的例子,那将是非常有用的。 consul1: image: progrium/consul ports: – "8400:8400" – "8500:8500" – "8600:53/udp" – "8600:53/tcp" environment: GOMAXPROCS: 100 entrypoint: "/bin/consul" hostname: consul command: agent -log-level=debug -server -config-dir=/config -bootstrap -ui-dir /ui simpletest: build: simpletest hostname: simpletest environment: JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n -Dspring.cloud.consul.host=consul1" ports: – 39041:7051 – 39052:7055 # d2fdockerroot_consul1_1 consul […]

如何在Docker容器中设置执行器IP?

最后3天,我试图设置一个Docker机器,包含3个组件:Spark Master,Spark Worker和Driver(Java)应用程序 从Docker启动驱动程序OUTSIDE时,一切正常。 然而,启动这三个组件都会导致port-firewall-host-nightmare 为了保持它(起初)简单,我使用docker-compose – 这是我的docker-compose.yml: driver: hostname: driver image: driverimage command: -Dexec.args="0 192.168.99.100" -Dspark.driver.port=7001 -Dspark.driver.host=driver -Dspark.executor.port=7006 -Dspark.broadcast.port=15001 -Dspark.fileserver.port=15002 -Dspark.blockManager.port=15003 -Dspark.broadcast.factory=org.apache.spark.broadcast.HttpBroadcastFactory ports: – 10200:10200 # Module REST Port – 4040:4040 # Web UI (Spark) – 7001:7001 # Driver Port (Spark) – 15001:15001 # Broadcast (Spark) – 15002:15002 # File Server (Spark) – 15003:15003 […]

用于消费者程序的multithreading与容器的优缺点

考虑一个RabbitMQ消费者计划。 你可以编写一个multithreading的线程,其中每个线程使用队列项目的一部分。 或者你可以用一个线程编写一个简单的CLI程序,连接到RabbitMQ代理程序,在这个代理程序中循环使用队列中的项目,然后在不同的容器中运行它们中的几个! 你认为我应该执行哪一个? 在这种情况下,multithreadingvs容器有什么优点和缺点?

在Spring Boot中,环境variables和@Value不能一起工作

我有一个Spring启动应用程序,连接到作为caching工作的Redis实例。 当我在开发环境中时,我有以下几点: — spring: profiles: default redis: host: localhost port: 6379 而我的cachingconfiguration类是这样的: @Configuration @EnableCaching public class CacheConfiguration { @Value("${redis.host}") String redisHost; @Value("${redis.port}") int redisPort; 在生产中,这个应用程序是Docker化的,我有以下docker-compose.yml文件: redis: image: tutum/redis ports: – "6379:6379" volumes: – /data app: build: . ports: – "8080:8080" links: – redis 而application.yml是: — spring: profiles: docker redis: host: redis port: 6379 要在Docker上启动应用程序,我使用-Dspring.profiles.active=docker运行,但是当应用程序启动时,会发生以下错误: Caused […]

bin // sonar-scanner:103:exec::Permission denied

在使用Gitlab-CI + Sonarqube运行testing版本时,无法执行命令bin/sonar-scanner 。 我得到错误103: exec:: Permission denied 。 它通常在shell上执行,而不是通过使用CI的构build自动化。

将parameter passing给docker入口点

我有Dockerfile FROM java:8 ADD my_app.jar /srv/app/my_app.jar WORKDIR /srv/app ENTRYPOINT ["java", "-jar", "my_app.jar", "–spring.config.location=classpath:/srv/app/configs/application.properties"] 在入口点如何在没有./run.sh情况下为java创builddynamic参数? (如-Dversion=$version或其他) 我想在启动容器时传递这个参数。 –entrypoint something不能在Docker 1.11上工作;(

如何在Docker容器中设置Java堆大小(Xms / Xmx)?

至于提出这个问题,Docker看起来已经足够新,没有网上的这个问题的答案。 我发现的唯一的地方就是这篇文章 ,作者说这很难,就是这样。

在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的优点和缺点是什么?