c++ - 从 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
解决方案
127.0.0.1 是一个环回地址。环回地址连接回建立连接的容器。如果 C++ 程序在reader
容器中运行,则 redis 不在同一个容器中运行。您需要连接到redis
容器:
auto redis = Redis("tcp://redis:6379");
我不建议在可执行文件中硬编码它。使其可配置。
推荐阅读
- amazon-web-services - 优化使用缓存生成和提供文件的 aws 托管应用程序
- python - pyinstaller 和 pandas(缺少多个挂钩)
- javascript - Angularjs - 将 blob 保存到无法处理动态数据的文本文件中
- camunda - 如何控制是否在 Camunda Tasklist 中显示流程实例变量?
- c# - 在列表中获取 JSON API 扩展
- javascript - es6扩展运算符不组合键控对象
- ios - 如何使用情节提要在 Tableview Cell 中为 2 个标签和一个图像视图设置约束?
- php - 复杂的数组比较
- python - 在 python 3.6 上安装 nltk 2.0.4 时出错
- java - 在进行 twilio 电话会议时收集用户的输入