【发布时间】:2018-02-18 11:53:30
【问题描述】:
我使用基于 Spring Boot 框架的 REST API 实现了简单、独立的 webapp。我的应用程序正在使用 Redis 缓存一些数据。现在我想对 webapp 和 Redis 缓存进行 dockerize 以提供简单的运行过程,而无需在工作环境中强制安装 Redis。
我尝试了很多方法,但我仍然与RedisConnectionFailureException: Cannot get Jedis connection 和根本原因ConnectException: Connection refused 斗争。
pom.xml:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<repository>${project.artifactId}</repository>
</configuration>
</plugin>
</plugins>
</build>
docker-compose.yml:
version: '3'
services:
web:
build: .
ports:
- "8080:8080"
links:
- redis
redis:
image: redis
ports:
- "6379:6379"
Dockerfile:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD target/xxx.jar abc.jar
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS - Djava.security.egd=file:/dev/./urandom -jar /abc.jar" ]
application.properties:
spring.redis.host=redis
spring.redis.port=6379
我通过构造函数自动装配StringRedisTemplate,从模板中获取ValueOperations并简单地使用它(无需额外的Redis配置)。我使用命令 sudo docker-compose up 运行应用程序,并在每次 Sprin Boot 应用程序调用 Redis 时得到上面列出的异常。 Redis 缓存可从主机访问。没有 Docker 并且安装了 Redis 服务后一切正常。
更新:我正在使用我之前粘贴的 application.properties 和 application.yml,我在其中存储了一些与我的应用程序逻辑相关的自定义配置(不是框架配置)。我读到这应该不是问题,因为 Spring Boot 会加载这两个文件并将它们合并。我怀疑 Redis 主机在 Jedis 连接中设置不正确,但我不知道如何检查它。
【问题讨论】:
标签: docker spring-boot redis