【问题标题】:How to get docker-compose container to see Redis host?如何让 docker-compose 容器查看 Redis 主机?
【发布时间】:2022-11-12 23:01:07
【问题描述】:

我有这个简单的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 Dockerfile:

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

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

当我将客户端配置为本地时,该应用程序确实可以在没有 Docker 的情况下工作。

我到底做错了什么?

【问题讨论】:

  • 请包括您在计算机上运行的操作系统版本。 docker 本身可能存在一些问题。这并不总是你的错。
  • @DiptoMondal 很高兴知道 Docker 版本很重要。但 Kaleab 为我解决了这个问题。谢谢!
  • 是的,苹果硅的 docker-desktop 中可能存在一些问题。

标签: go docker-compose redis


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Golang 和 redis 面临类似的问题。

    version: '3.0'
    services:
      redisdb:
        image: redis:6.0
        restart: always
        ports:
          - "6379:6379"
        container_name: redisdb-container
        command: ["redis-server", "--bind", "redisdb", "--port", "6379"]
    
      urlshortnerservice:
        depends_on:
          - redisdb
        ports:
          - "7777:7777"
        restart: always
        container_name: url-shortner-container
        image: url-shortner-service
    

    在redis配置中使用

    redisClient := redis.NewClient(&redis.Options{
            Addr:     "redisdb:6379",
            Password: "",
            DB:       0,
        })
    

    【讨论】: