【问题标题】:How to deploy Spring Boot RESTful Web Service Docker img to EC2?如何将 Spring Boot RESTful Web Service Docker 映像部署到 EC2?
【发布时间】:2018-08-30 13:19:00
【问题描述】:

我想做的很简单,将 Spring Boot RESTful Web 服务部署到 EC2,以便公开访问。

为此,我需要执行以下操作:

  1. 编写 Spring Boot Web 服务,在本地进行容器化和测试 - 完成

这是我的 Dockerfile:

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

当我 docker 在 8080 上本地运行它时,它工作正常(返回静态 json)。

  1. 推送到 Dockerhub - 完成
  2. 在 aws 上启动 Amazon Linux AMI 并使其可通过 http 访问(端口 80) - 完成
  3. 安装 apache (httpd) 并开始 - 完成

这里是我需要帮助的地方

  1. 我像这样从 dockerhub 运行 docker 映像

    docker run --rm -p 80:8080 kaspartr/demo
    

它当然不允许端口被 apache 占用。如果我停止并运行它,它会被部署,但我无法在线访问它。

有人可以解释一下如何将 docker 映像部署到 apache 中吗?

我是否需要更改 Dockerfile 或其他内容?

谢谢!!

【问题讨论】:

    标签: spring amazon-web-services docker spring-boot


    【解决方案1】:

    通常我在单独的端口上运行应用程序并执行 docker forward:

    添加你的 application.properties

    server.port=9001
    

    并添加到 docker-compose.yml:

    version: '1'
    services:
      your-service:
        build: .
        ports:
          - '9001:9001'
        environment:
          SERVICE_URL: http://service:9001/path
    

    【讨论】:

    • 据我了解:server.port=9001 告诉 Spring 应用程序在端口 9001 上工作。端口:'9001:9001' 将端口 9001 定向到 9001?此外,您的服务应该与 SERVICE_URL 中的“服务”相同吗? apache 怎么知道将所有调用都指向端口 80,路径为 '/courses' 到端口 9001,或者我根本不需要使用 apache?
    • 你是对的,那些是暴露的端口。这取决于您的设置,但如果您在 Tomcat 之上安装 Apache,则必须使用 VirtualHost 设置对其进行配置。
    【解决方案2】:

    由于 Apache 已经占用了 80 端口,你不能让你的容器也运行在 80 端口上。

    我的猜测是您打算使用 Apache 作为容器的反向代理。尝试将您的容器发布到另一个端口,并使用 Apache 将端口 80 代理到容器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-13
      • 2018-03-16
      • 2017-03-10
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 2015-09-09
      相关资源
      最近更新 更多