【问题标题】:Docker Swarm with springboot app带有 Spring Boot 应用程序的 Docker Swarm
【发布时间】:2018-12-05 18:44:18
【问题描述】:

我目前正在尝试在 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) 无法连接到 192.168.99.100 端口 8082: 拒绝连接。

来自服务的图像是:

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

希望大家帮忙,谢谢

【问题讨论】:

  • 你能验证容器正在那个确切的端口上运行吗? docker exec 进入该应用程序正在运行的 swarm 任务并在 localhost:8082 上运行相同的 curl 命令(可能需要在容器中安装 curl)

标签: docker spring-boot docker-swarm


【解决方案1】:

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

ports:
  - "8082:8080"

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

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

【讨论】:

    【解决方案2】:

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

    请检查当时为您提供请求的“docker service logs #containerid#”(查看容器 id 运行命令“docker stack ps #servicename#”),并查看您是否看到任何错误消息。

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

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2016-12-24
      • 2019-01-29
      • 2021-04-16
      • 2020-03-12
      • 2016-08-07
      • 2015-03-28
      • 1970-01-01
      • 2016-06-17
      相关资源
      最近更新 更多