docker - docker compose up 后后端到 redis 连接被拒绝

我目前正在尝试将 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/

相关文章:

r - 从单个表中查找多列

xml - 同时迭代两个 for-each 循环

sql - 有没有一种方法可以不使用 FOR 循环来创建虚拟记录?

html - 如何使整个 HTML 日期字段可点击?

vuejs3 - react 对象未在模板 Vue3 Composition API 上更新

next.js - NextJS 将类从页面传递到布局组件

c - 分拣技术 C

javascript - 计算数组中每个元素的频率 - javascript

scala - 推特 future 封锁

javascript - Target 的 Toggled ClassList 上的 CSS Tra