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"
即可。
我目前正在尝试将 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"
即可。