簡體   English   中英

將 Spring 引導和 redis 與 docker-compose 組合:連接被拒絕

[英]Combining Spring boot and redis with docker-compose: Connection refused

我正在嘗試使用 spring 引導和 MongoDB 和 redis 來做一個基本的 docker 容器。Mongo 很好,但是無法在 redis 和 spring 引導之間建立連接,雖然我覺得配置沒問題

docker-compose.yml

version: "3.9"
services:
  web:
    build: .
    ports:
      - "1234:1234"
    depends_on:
      - redis
      - db
  db:
    image: mongo
    hostname: mongodb
    ports:
      - "27017:27017"
  redis:
    hostname: redis
    image: redis
    restart: always
    ports:
      - "6379:6379"

Dockerfile:

FROM adoptopenjdk:11
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

配置.java:

@Configuration
@EnableRedisRepositories
public class Config
{

    RedisStandaloneConfiguration standaloneConfiguration() {
        return new RedisStandaloneConfiguration("redis", 6379);
    }

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        return new JedisConnectionFactory(standaloneConfiguration());
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(jedisConnectionFactory());
        return template;
    }
}

問題:所有容器在 docker 組合后都在運行。 但是spring和redis無法建立連接。

java.net.ConnectException: Connection refused (Connection refused)
slot-web-1    |     at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
slot-web-1    |     at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[na:na]
slot-web-1    |     at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) ~[na:na]
slot-web-1    |     at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) ~[na:na]
slot-web-1    |     at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:na]

首先,如果你的容器在遠程服務器上,你可以在部署容器的服務器上使用te.net測試是否可以連接到redis的6379端口,如果可以,可以查看服務器是否開啟端口 6379,或白名單。 其次,可以嘗試在電腦上通過te.net連接容器redis的6379端口。 如果是,你可以檢查你的redis配置的ip、密碼、用戶名等信息是否正確。

如果您的 redis 服務器啟動晚於 spring 啟動,則可能會發生此錯誤。 確保 redis 首先通過以下命令啟動。

docker compose down && docker compose up -d redis && sleep 5 && docker compose up --build -d

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM