Kod odpowiedzialny za łączenie do Redisa:
import redis.clients.jedis.JedisPool;
public class Database {
private final JedisPool pool;
public Database() {
String redisHost = System.getenv("REDIS_HOST");
if (redisHost == null || redisHost.isEmpty()) {
this.pool = new JedisPool("localhost", 6379);
} else {
this.pool = new JedisPool(redisHost, 6379);
}
}
}
z biblioteki:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.1.2</version>
</dependency>
Tworzę networka i uruchamiam w networku aplikację i bazę:
docker network create --driver bridge tool-network
docker run -d -p 6379:6379 --name redis --network tool-network redis
docker run -d --name myapp -e REDIS_HOST=redis --network tool-network tool
Niezależnie od wartości zmiennej REDIS_HOST
, czy to localhost
:
Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket.
czy redis lub host.docker.internal
:
Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to connect to any host resolved for DNS name.
Wersja Dockera 26.0.1.