从redis连接到docker中的redis++

3z6pesqy  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(644)

在我的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,尽管它们使用以 redis:// 但当我尝试使用c++代码时:

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

我明白了
无效uri:无效类型。
我也试过了 unix:// 结果是:
无法连接到redis:没有这样的文件或目录
不确定这是否重要,但这是读者档案

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
2nbm6dog

2nbm6dog1#

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

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

不过,我不建议在可执行文件中对其进行硬编码。使其可配置。

相关问题