具有springboot应用程序的Docker Swarm

时间:2018-06-27 00:56:27

标签: docker spring-boot docker-swarm

我目前正在尝试在3个虚拟机中使用docker swarm部署应用程序,我正在通过docker-compose来创建映像,我的文件如下:

Dockerfile:

FROM openjdk:8-jdk-alpine
WORKDIR /home
ARG JAR_FILE
ARG PORT
VOLUME /tmp
COPY ${JAR_FILE} /home/app.jar
EXPOSE ${PORT}
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/home/app.jar"]

我的docker-compose是:

version: '3'
services:
  service_colpensiones:
    build:
      context: ./colpensiones-servicio
      dockerfile: Dockerfile
      args:
        JAR_FILE: ColpensionesServicio.jar
        PORT: 8082
    volumes: 
     - data:/home 
    ports: 
     - 8082:8082
volumes: 
 data: 

我正在使用命令docker-compose up -d --build来构建映像,我自动创建了容器,以后将其删除。要使用docker swarm,我需要使用3台计算机,一个管理器和两个工作器,我还有另一个文件来部署具有3个副本的服务

version: '3'
services:
  service_colpensiones:
    image: deploy_lyra_colpensiones_service_colpensiones
    deploy:
     replicas: 5
     resources:
       limits:
         cpus: "0.1"
         memory: 50M
     restart_policy:
       condition: on-failure
    volumes: 
     - data:/home 
    ports: 
     - 8082:8082
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
networks:
  webnet: 
volumes: 
 data:

到目前为止,我认为一切都很好,因为在控制台中,使用以下命令:docker service ls我看到创建的服务,查看器dockersamples / visualizer:稳定,正确显示了端口8080上的节点,但是当我想通过以下方式对服务网址的请求:

卷曲-4 http://192.168.99.100:8082/colpensiones/msg

错误出现: curl:(7)无法连接到192.168.99.100端口8082:拒绝连接。

服务中的图像为:

enter image description here enter image description here

我正在关注docker教程:入门https://docs.docker.com/get-started/part5/

希望您能帮上忙,谢谢

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但是在将Spring Boot服务的端口号更改为

之后已解决
ports:
  - "8082:8080"

实际问题是:默认情况下,tomcat服务器在端口8080上侦听,而不是在撰写文件中提到的端口。我也增加了内存限制。

仅供参考:在服务中运行的任务/容器的内部端口对于其他容器也可以是相同的(:),因此提及Spring Boot容器和可视化容器的8080(内部端口)都没问题。

答案 1 :(得分:0)

我的申请也遇到了同样的问题。我通过从Dockerfile => -Djava.security.egd=file:/dev/./urandom的java cmdline属性中删除来重建了我的应用程序,它开始为我工作。

请检查当时请求的“ docker服务日志#containerid#”(以查看容器ID运行命令“ docker stack ps#servicename#”),并查看是否看到任何错误消息。

PS:我最近开始使用docker,所以可能不是专家建议。万一有帮助的话。