首页 > 解决方案 > 带有 springboot 应用程序的 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:stable,在端口 8080 上正确显示节点,但是当我想发出请求时服务的 url 方式如下:

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

出现错误: curl: (7) Failed to connect to 192.168.99.100 port 8082: Refused connection。

来自服务的图像是:

在此处输入图像描述 在此处输入图像描述

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

我希望你的帮助,谢谢

标签: dockerspring-bootdocker-swarm

解决方案


我有同样的问题,但在将 spring boot 服务的端口号更改为

ports:
  - "8082:8080"

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

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


推荐阅读