Redis和Spring Boot集成,但出现K8S错误

问题描述 投票:0回答:1

我有以下docker文件:

FROM openjdk:8-jdk-alpine
ENV PORT 8094
EXPOSE 8094
RUN mkdir -p /app/
COPY build/libs/fqdn-cache-service.jar /app/fqdn-cache-service.jar
WORKDIR /build
ENTRYPOINT [ "sh" "-c", "java -jar /app/fqdn-cache-service.jar" ]

docker-compose.yaml文件:

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: fqdn-cache-service
    ports:
      - "8094:8094"
    links:
      - "db:redis"
  db:
    image: "redis:alpine"
    #hostname: redis
    ports:
      - "6378:6378"

deployment.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fqdn-cache-service
spec:
  selector:
    matchLabels:
      run: spike
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
        run: spike
    spec:
      containers:
        - name: fqdn-cache-service
          imagePullPolicy: Never
          image: fqdn-cache-service:latest
          ports:
            - containerPort: 8094
              protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
spec:
  selector:
    matchLabels:
      run: spike
  replicas: 1
  template:
    metadata:
      labels:
        run: spike
    spec:
      hostname: redis
      containers:
        - name: redis
          image: redis:alpine
          ports:
            - containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
  name: fqdn-cache-service
  labels:
    run: spike
spec:
  type: NodePort
  ports:
    - port: 8094
      nodePort: 30001
  selector:
    run: spike
---
apiVersion: v1
kind: Service
metadata:
  name: redis
  labels:
    run: spike
    app: redis
spec:
  type: NodePort
  ports:
    - port: 6379
      nodePort: 30002
  selector:
    run: spike

并且群集信息ip为127.0.0.1。我在ubuntu操作系统上使用microk8s。如果我请求获取和ID(127.0.0.1/webapi/users/1),则会收到错误消息:

Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

尽管在带有redis的常规Java应用程序上或带有redis的dockerize spring boot上都可以使用。

任何帮助,为什么会发生这种情况?

这是弹簧靴的配置:

@Configuration
public class ApplicationConfig {
    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory factory = new JedisConnectionFactory();
        factory.setHostName("127.0.0.1");
        factory.setPort(30001);
        factory.setUsePool(true);
        return factory;
    }

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

如果主机名是localhost并且\或端口是6379 ...,也会发生此问题。

谢谢!

spring-boot docker kubernetes redis
1个回答
0
投票

[在容器中运行时,127.0.0.1通常是指容器本身,而不是指容器所运行的主机。如果要连接到服务,请尝试使用其名称和端口:端口6379上的“ redis”和端口8094上的“ fqdn-cache-service”。

© www.soinside.com 2019 - 2024. All rights reserved.