在我的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
1条答案
按热度按时间2nbm6dog1#
127.0.0.1是一个环回地址。环回地址连接回建立连接的容器。如果c++程序在
reader
容器,则redis不在同一容器中运行。你需要连接到redis
容器:不过,我不建议在可执行文件中对其进行硬编码。使其可配置。