Ошибка при подключении к контейнеру redis docker

#docker #go

# #docker #Вперед

Вопрос:

У меня ошибка, из-за которой я не могу подключиться из своего приложения Go к своему контейнеру redis. Он работал не менее 2 недель, пока я не перезапустил свой компьютер, я не вижу, что могло измениться, и я убедился, что никакие другие контейнеры или процессы не используют тот же порт 6379.

Моя ошибка:

 panic: failed to load incr lua script: EOF

goroutine 1 [running]:
code/website.connectToRedisLimiterDatabase(0x0, 0x0)
 

Я могу подключиться к контейнеру redis через свой cli:

 //exec inside
docker exec -it container-name redis-cli

// set value
set name "test"

// get value
get name
// shows test
 

Вот где я получаю ошибку в своем коде go:

 redisLimiter "github.com/ulule/limiter/v3/drivers/store/redis"
redisSessions "github.com/rbcervilla/redisstore/v8"

// RedisLimiterInstance contains the Redis limiter client and store objects
type RedisLimiterInstance struct {
    Client redisLimiter.Client
    Store  limiter.Store
}

// RedisSessionInstance contains the Redis session client and store objects
type RedisSessionInstance struct {
    Client *redis.Client
    Store  *redisSessions.RedisStore
}

var redisLimiterInstance RedisLimiterInstance
var redisSessionInstance RedisSessionInstance


func connectToRedisLimiterDatabase() error {
    redisLimiterClient := redis.NewClient(amp;redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    store, err := redisLimiter.NewStoreWithOptions(redisLimiterClient, limiter.StoreOptions{
        Prefix:   "rate_limiter_",
        MaxRetry: 3,
    })
    if err != nil {
        panic(err)
    }
    // panic: failed to load incr lua script: EOF
    redisLimiterInstance = RedisLimiterInstance{
        Client: redisLimiterClient,
        Store:  store,
    }
    return nil
}

func connectToRedisSessionDatabase() error {
    redisSessionClient := redis.NewClient(amp;redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })
    // New default RedisStore
    store, err := redisSessions.NewRedisStore(context.Background(), redisSessionClient)
    if err != nil {
        log.Fatal("failed to create redis store: ", err)
    }

    store.KeyPrefix("session_")
    store.Options(sessions.Options{
        Path: "/",
        MaxAge:   86400 * 7,
        HttpOnly: false,

    })

    redisSessionInstance = RedisSessionInstance{
        Client: redisSessionClient,
        Store:  store,
    }
    return nil
}
 

Через рабочий стол docker контейнер показывает:

 Configuration loaded

Running mode=standalone, port=6379.

Server initialized

Ready to accept connections
 

Мой файл conf просто:

 bind 127.0.0.1
port 6379
 

и сам файл docker:

 FROM redis:6.0.9

COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
 

Есть мысли?

Комментарии:

1. Если ваш redis внутри контейнера привязан к 127.0.0.1, то вы можете подключиться к нему только изнутри контейнера. Можете ли вы подключить его извне контейнера? Попробуйте 0.0.0.0

2. проблема заключалась в привязке 127.0.0.1 в файле docker, как вы упомянули, я удалил эту строку и перестроил, и она сработала. Должен ли я сохранить эту строку, но изменить номер? Также, пожалуйста, отправьте ответ, и я приму

Ответ №1:

Привязка к адресу 127.0.0.1 в контейнере redis разрешит соединения только внутри контейнера. Либо удалите строку, либо выполните привязку к 0.0.0.0, чтобы redis мог привязываться ко всем интерфейсам, а не только к обратному циклу.