docker 完成后转到后端到 redis 连接被拒绝

Go backend to redis connection refused after docker compose up

我目前正在尝试将 docker compose 引入我的项目。它包括一个使用 redis 内存数据库的 golang 后端。

version: "3.9"
services:
  frontend:
    ...
  backend:
    build:
      context: ./backend
    ports:
      - "8080:8080"
    environment:
      - NODE_ENV=production
    env_file:
      - ./backend/.env
  redis:
    image: "redis"
    ports:
      - "6379:6379"
FROM golang:1.16-alpine
RUN mkdir -p /usr/src/app
ENV PORT 8080
WORKDIR /usr/src/app
COPY go.mod /usr/src/app
COPY . /usr/src/app
RUN go build -o main .
EXPOSE 8080
CMD [ "./main" ]

构建运行成功,但在启动服务后,go 后端立即退出并抛出以下错误:

Error trying to ping redis: dial tcp 127.0.0.1:6379: connect: connection refused

此处捕获错误:

_, err = client.Ping(ctx).Result()
if err != nil {
    log.Fatalf("Error trying to ping redis: %v", err)
}

为什么后端docker服务无法连接到redis?重要提示:当 redis 服务是 运行 并且我使用 go run *.go 手动启动我的后端时,没有错误并且后端启动成功。

当你 运行 你的 Go 应用程序在 docker 容器中时,本地主机 IP 127.0.0.1 指的是这个容器。您应该使用 Redis 容器的主机名从您的 Go 容器进行连接,因此您的连接字符串为:

redis://redis

我发现我遇到了同样的问题。只需将 redis.NewClient(&redis.Options{...}) Addr: "localhost:6379" 更改为 Addr: "redis:6379" 即可。