我正在学习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.
请让我知道我错过了什么。
1条答案
按热度按时间k2arahey1#
在dockerfile中,必须暴露端口8080。在我看来,docker官方文档并不完全清楚expose做了什么。我们必须知道的是,为了能够连接到一个端口,我们必须公开它,如果我们想从外部网络连接,我们可能必须发布它。
为了公开它,您需要在dockerfile中添加以下行:
dockerfile应该如下所示:
另外,我注意到spring将期望在上连接到redis
localhost
. 这在您的情况下不起作用,因为spring应用程序和redis示例将在不同的容器中运行。为了解决这个问题,在spring项目的application.properties
文件:在此之后,重新生成项目,并重新生成docker映像。
这将起作用,因为docker将引用内部网络中的redis作为其“容器名”,即
container_name: redis
对你来说。