我有一个小型应用程序,在其中我将Redis用于缓存和Spring Boot。应用程序在本地成功运行,但是当我尝试对其进行docker化时,出现连接拒绝异常。
这是我的docker-compose.yml文件:
version: '3.5'
services:
my-application:
image: my-application:latest
container_name: my-application
ports:
- 8080:8080
hostname: my-application
redis:
image: redis
command: [ "redis-server", "--protected-mode", "no" ]
volumes:
- ./data:/data
ports:
- 6379:6379
Dockerfile:
FROM openjdk:7
VOLUME /tmp
ADD my-application-0.0.1.jar my-application-0.0.1.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "my-application-0.0.1.jar"]
当我检查docker控制台时,我看到redis以独立模式启动
我想念什么?
谢谢
答案 0 :(得分:0)
您必须设置:
server.address=0.0.0.0
在您的application.properties
中。如果您的应用程序正在容器中的127.0.0.1
上侦听,则您将无法从主机访问它。
答案 1 :(得分:0)
您需要在docker compose文件中将redis主机更改为redis配置的名称,在这种情况下- redis
可以通过两种方式进行配置:
redisStandaloneConfiguration.setHostName("redis");
此外,就我而言,我没有在docker文件中使用卷,因此要使用新的jar文件,您需要执行启动docker compose的所有3个步骤(除了gradle或clean install中的clean build以外)在Maven中):
我希望这对某人有用! :)
答案 2 :(得分:0)
我遇到了同样的问题,并用(docker-compose.yml)修复了
cache:
image: redis
...
ports:
- 6379:6379
然后在application.properties spring.redis.host=cache
最终
@Value("${spring.redis.host}")
String redisHost
...
redisStandaloneConfiguration.setHostName(redisHost);
我认为,在docker网络中,与图像名称相同的服务名称引起了问题,并以docker无法创建与Redis主机的连接而告终。