Веб-сервер не может подключиться к Redis через docker-compose
Я пытаюсь подключиться к экземпляру Redis в сети докеров через веб-сервер в той же сети. Мой код готов, и я использую свой docker-compose.yml:
thor-redis:
image: redis:5.0.7
networks:
- thorcast
ports:
- "6380:6379"
volumes:
- ./redis.conf:/usr/local/etc/redis.conf
entrypoint: redis-server /usr/local/etc/redis.conf
thorcast-server:
build: ../../thorcast-server
volumes:
- ../../thorcast-server:/app/thorcast-server
networks:
- thorcast
ports:
- "8000:8000"
env_file:
- ../../thorcast-server/env.list
Соответствующий раздел файла env.list:
REDIS_HOST=thor-redis
REDIS_PORT=6380
REDIS_DB=0
REDIS_PASSWORD=redis_pass
Код в моем приложении для подключения к Redis:
a.Redis = redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%s", conf.redisHost, conf.redisPort),
Password: conf.redisPassword,
DB: conf.redisDb,
})
Мой код для заполнения conf:
type config struct {
sqlUsername string
sqlPassword string
sqlHost string
sqlPort string
sqlDbName string
redisPassword string
redisHost string
redisPort string
redisDb int
}
// method to initialize config struct from environment variables
func (conf *config) configure() {
conf.sqlUsername = os.Getenv("THORCAST_DB_USERNAME")
conf.sqlPassword = os.Getenv("THORCAST_DB_PASSWORD")
conf.sqlHost = os.Getenv("THORCAST_DB_HOST")
conf.sqlPort = os.Getenv("THORCAST_DB_PORT")
conf.sqlDbName = os.Getenv("THORCAST_DB_NAME")
conf.redisPassword = os.Getenv("REDIS_PASSWORD")
conf.redisHost = os.Getenv("REDIS_HOST")
conf.redisPort = os.Getenv("REDIS_PORT")
conf.redisDb, _ = strconv.Atoi(os.Getenv("REDIS_DB"))
}
var conf = config{}
type App struct {
Router *mux.Router
Logger http.Handler
DB *sql.DB
Redis *redis.Client
}
В файле redis.conf не указаны IP-адреса привязки, а для параметра requirepass установлено то же значение, что и для redis_pass. Кроме того, на своем сервере я вижу следующую ошибку:
{"error":"dial tcp 172.21.0.5:6380: connect: connection refused"}
Когда я проверяю изображение Redis, я могу подтвердить, что у него есть этот IP-адрес:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dev_thor-
redis_1
172.21.0.5
Когда я пытаюсь подключиться с локального компьютера через redis-cli, я могу получить доступ к серверу без проблем. Я искал в Google, чтобы попытаться найти похожие проблемы, но все они, похоже, связаны с людьми, пытающимися получить доступ к Redis через localhost, чего я не пытаюсь делать. Любая помощь приветствуется.
1 ответ
Возможно, вы забыли связать свое приложение с Redis из сетевой точки зрения
thor-redis:
image: redis:5.0.7
networks:
- thorcast
ports:
- "6380:6379"
volumes:
- ./redis.conf:/usr/local/etc/redis.conf
entrypoint: redis-server /usr/local/etc/redis.conf
thorcast-server:
build: ../../thorcast-server
volumes:
- ../../thorcast-server:/app/thorcast-server
networks:
- thorcast
ports:
- "8000:8000"
env_file:
- ../../thorcast-server/env.list
links: # <-- Add this
- thor-redis # <-- Add this