如何让 docker-compose 容器看到 Redis 主机?

How to get docker-compose container to see Redis host?

我有这个简单的 docker-compose.yml 文件:

version: '3.8'
services:
  bot:
    build:
      dockerfile: Dockerfile
      context: .
    links:
      - redis
    depends_on:
      - redis
  redis:
    image: redis:7.0.0-alpine
    ports:
     - "6379:6379"
    environment:
     - REDIS_REPLICATION_MODE=master
    restart: always
    volumes: 
      - cache:/data
    command: redis-server
volumes:
  cache:
    driver: local

这就是 bot(在 Go 中)连接到 redis 的方式:

import "github.com/go-redis/redis/v8"

func setRedisClient() {
  rdb = redis.NewClient(&redis.Options{
    Addr:     "redis:6379",
    Password: "",
    DB:       0,
  })
}

bot Docker文件:

FROM golang:1.18.3-alpine3.16
WORKDIR /go/src/bot-go
COPY . .
RUN go build .
RUN ./bot-go

但是当我 运行 docker-compose up --build 我总是得到:

panic: dial tcp: lookup redis on 192.168.65.5:53: no such host

redis 无论我对主机或 docker-compose 文件进行什么更改,都永远不会看到主机。

当我将客户端配置为本地时,应用程序在没有 Docker 的情况下也能正常工作。

我到底做错了什么?

问题是 bot-go 图像从未停止构建。在 Dockerfile 中将 RUN ./bot-go 更改为 CMD [ "./bot-go" ],一切都会正常工作。