Это потому, что когда вы запускаете свои приложения в двух разных контейнерах, они больше не находятся в одной сети. Вы не можете получить доступ к localhost или любому IP с обратной связью, если вы не находитесь в контейнере. Внутри контейнера только localhost. Но вы можете получить доступ к контейнерам по их имени, если оба контейнера находятся в одной сети.
Следовательно, вы должны организовать сеть докеров и развернуть оба контейнера в этой сети, а затем каждый другой контейнер, способный разрешать хосты по их имени контейнера.
Попробуйте это;
$ docker network create test-netw
$ docker run --net test-netw -d --name redis -p 6379:6379 redis
И изменить хост Redis в файле aplication.yml
;
spring:
redis:
host: redis
port: 6379
jedis:
pool:
max-active: 7
max-idle: 7
min-idle: 2
Добавить эту конфигурацию, а также
@Bean
JedisPool jedisPool(RedisProperties redisProperties) {
return new JedisPool(new JedisPoolConfig(), redisProperties.getHost(), redisProperties.getPort());
}
И вместо использования;
Jedis jedis = new Jedis();
Используйте это;
Jedis jedis = pool.getResource();
И последний шаг:
$ docker run -p 8080:8080 --net test-netw shortenurl