首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >via服务器无法通过docker-compose连接到Redis

via服务器无法通过docker-compose连接到Redis
EN

Stack Overflow用户
提问于 2020-02-19 21:22:17
回答 1查看 55关注 0票数 0

我正在尝试通过同一网络上的the服务器连接到docker网络上的redis实例。我的代码是go,我正在使用docker-compose.yml:

代码语言:javascript
运行
复制
thor-redis:
    image: redis:5.0.7
    networks:
      - thorcast
    ports:
      - "6380:6379"
    volumes:
      - ./redis.conf:/usr/local/etc/redis.conf
    entrypoint: redis-server /usr/local/etc/redis.conf
thorcast-server:
    build: ../../thorcast-server
    volumes:
      - ../../thorcast-server:/app/thorcast-server
    networks:
      - thorcast
    ports:
      - "8000:8000"
    env_file:
      - ../../thorcast-server/env.list

env.list文件的相关部分:

代码语言:javascript
运行
复制
REDIS_HOST=thor-redis
REDIS_PORT=6380
REDIS_DB=0
REDIS_PASSWORD=redis_pass

我的应用程序中连接到redis的代码是:

代码语言:javascript
运行
复制
a.Redis = redis.NewClient(&redis.Options{
    Addr:       fmt.Sprintf("%s:%s", conf.redisHost, conf.redisPort),
    Password:   conf.redisPassword,
    DB:         conf.redisDb,
})

我填充conf的代码是:

代码语言:javascript
运行
复制
type config struct {
    sqlUsername     string
    sqlPassword     string
    sqlHost         string
    sqlPort         string
    sqlDbName       string
    redisPassword   string
    redisHost       string
    redisPort       string
    redisDb         int
}
// method to initialize config struct from environment variables
func (conf *config) configure() {
    conf.sqlUsername = os.Getenv("THORCAST_DB_USERNAME")
    conf.sqlPassword = os.Getenv("THORCAST_DB_PASSWORD")
    conf.sqlHost = os.Getenv("THORCAST_DB_HOST")
    conf.sqlPort = os.Getenv("THORCAST_DB_PORT")
    conf.sqlDbName = os.Getenv("THORCAST_DB_NAME")
    conf.redisPassword = os.Getenv("REDIS_PASSWORD")
    conf.redisHost = os.Getenv("REDIS_HOST")
    conf.redisPort = os.Getenv("REDIS_PORT")
    conf.redisDb, _ = strconv.Atoi(os.Getenv("REDIS_DB"))
}
var conf = config{}

type App struct {
    Router *mux.Router
    Logger http.Handler
    DB     *sql.DB
    Redis  *redis.Client
}

在redis.conf文件中,没有指定绑定is,并且要求通过被设置为与redis_pass相同的值。此外,我在我的服务器上看到的错误是:

代码语言:javascript
运行
复制
{"error":"dial tcp 172.21.0.5:6380: connect: connection refused"}

当我检查redis镜像时,我可以确认它具有以下IP地址:

代码语言:javascript
运行
复制
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dev_thor- 
redis_1
172.21.0.5

当我尝试通过redis-cli离开我的本地机器时,我可以毫无问题地访问服务器。我在谷歌上到处搜索,试图找到类似的问题,但它们似乎都是与试图通过localhost访问redis的人有关,而我不打算这样做。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2020-02-19 21:43:05

您可能忘记了从网络角度将您的应用程序与redis链接

代码语言:javascript
运行
复制
    thor-redis:
        image: redis:5.0.7
        networks:
          - thorcast
        ports:
          - "6380:6379"
        volumes:
          - ./redis.conf:/usr/local/etc/redis.conf
        entrypoint: redis-server /usr/local/etc/redis.conf
    thorcast-server:
        build: ../../thorcast-server
        volumes:
          - ../../thorcast-server:/app/thorcast-server
        networks:
          - thorcast
        ports:
          - "8000:8000"
        env_file:
          - ../../thorcast-server/env.list
        links:          # <-- Add this
          - thor-redis  # <-- Add this
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60301366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档