无法访问api

pxy2qtax  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(357)

我正在学习docker,并有一个docker撰写运行SpringBoot和redis。
dockerfile文件

FROM openjdk:12-jdk-alpine
ARG JAR_FILE=target/reactive-url-shortener-0.0.1-SNAPSHOT.jar

# cd /opt/app

WORKDIR /opt/app

# cp target/spring-boot-web.jar /opt/app/app.jar

COPY ${JAR_FILE} app.jar

# java -jar /opt/app/app.jar

ENTRYPOINT ["java","-jar","app.jar"]

Docker

version: '3'
networks:
  test:
services:
  web:
    build: .
    depends_on:
      - redis
    ports:
      - "8080:8080"
    networks:
      - test
  redis:
    container_name: redis
    image: "library/redis:alpine"
    hostname: redis
    ports:
      - "6379:6379"
    networks:
      - test

当我试图通过 Postman 或浏览器访问我的springapi时,没有得到任何回应
这是 Postman 的错误 Error: socket hang up 应用程序属性文件

spring.redis.host=redis
spring.redis.port=6379

这是我正在为我的学习做的项目。
https://github.com/spring-academy/reactive-link-shortener-sample-app.
请让我知道我错过了什么。

k2arahey

k2arahey1#

在dockerfile中,必须暴露端口8080。在我看来,docker官方文档并不完全清楚expose做了什么。我们必须知道的是,为了能够连接到一个端口,我们必须公开它,如果我们想从外部网络连接,我们可能必须发布它。
为了公开它,您需要在dockerfile中添加以下行:

EXPOSE 8080

dockerfile应该如下所示:

FROM openjdk:12-jdk-alpine
ARG JAR_FILE=target/demo-0.0.1-SNAPSHOT.jar

# cd /opt/app

WORKDIR /opt/app

# cp target/spring-boot-web.jar /opt/app/app.jar

COPY ${JAR_FILE} app.jar
EXPOSE 8080

# java -jar /opt/app/app.jar

ENTRYPOINT ["java","-jar","app.jar"]

另外,我注意到spring将期望在上连接到redis localhost . 这在您的情况下不起作用,因为spring应用程序和redis示例将在不同的容器中运行。为了解决这个问题,在spring项目的 application.properties 文件:

spring.redis.host=redis

在此之后,重新生成项目,并重新生成docker映像。
这将起作用,因为docker将引用内部网络中的redis作为其“容器名”,即 container_name: redis 对你来说。

相关问题