我目前正在尝试将 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
手动启动我的后端时,没有错误并且后端启动成功。
最佳答案
当您在 docker 容器内运行 Go 应用程序时,本地主机 IP 127.0.0.1 指的是该容器。您应该使用 Redis 容器的主机名从您的 Go 容器进行连接,因此您的连接字符串将是:
redis://redis
https://stackoverflow.com/questions/67951731/