首页 > 解决方案 > 从 Redis++ 连接到 Docker 中的 Redis

问题描述

在我的 docker-compose 文件中,redis 暴露在 6379,reader是一个 gcc 容器。

  reader:
    build:
      context: ./reader-manager
      dockerfile: reader_manager.dockerfile
    volumes: 
      - './reader-manager:/avn/reader-manager'
    depends_on: 
      - redis    

  redis:
    image: redis
    ports:
      - 6379:6379

在我的 C++ 代码中,我无法连接到 redis 实例:

auto redis = Redis("tcp://127.0.0.1:6379");
redis.set("key", "val");

这导致

Redis连接失败:连接被拒绝

环境中的其他容器(如flask)可以很好地连接到redis,尽管它们使用的url开头redis://但是当我在我的C++代码中尝试时:

auto redis = Redis("redis://127.0.0.1:6379");
redis.set("key", "val");

我明白了

无效的 URI:无效的类型。

我也试过unix://结果:

Redis连接失败:没有这样的文件或目录

不确定是否重要,但这是阅读器 dockerfile

FROM gcc:latest

RUN apt-get update -y
RUN apt-get install cmake -y

# install/compile hiredis
WORKDIR /avn
RUN git clone https://github.com/redis/hiredis.git
WORKDIR /avn/hiredis
RUN make
RUN make install

# install/compile redis-plus-plus
WORKDIR /avn
RUN git clone https://github.com/sewenew/redis-plus-plus.git
WORKDIR /avn/redis-plus-plus
RUN mkdir compile
WORKDIR /avn/redis-plus-plus/compile
RUN cmake -DCMAKE_BUILD_TYPE=Release -DREDIS_PLUS_PLUS_BUILD_TEST=OFF -DREDIS_PLUS_PLUS_CXX_STANDARD=17 ..
RUN make
RUN make install

# compile and run the program
WORKDIR /avn/reader-manager
CMD make && ../../bin/main

标签: c++dockerredis

解决方案


127.0.0.1 是一个环回地址。环回地址连接回建立连接的容器。如果 C++ 程序在reader容器中运行,则 redis 不在同一个容器中运行。您需要连接到redis容器:

auto redis = Redis("tcp://redis:6379");

我不建议在可执行文件中硬编码它。使其可配置。


推荐阅读