如何使用redis rs从docker容器内部连接到redis?

gv8xihay  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(528)

代码

https://github.com/thiskevinwang/rust-redis-docker/tree/for-stackoverflow
上下文:
用铁 rust 写的 Cargo.toml :

[dependencies]
redis = "0.16.0"
hyper = "0.13"

地方发展✅

有用的东西:
运行redis docker容器 bitnami/redis ,与一起发布
-p 6379:6379 redis-cli 可以成功连接到此docker容器
浏览器可以在
localhost:3000 GET / 显示一些文本✅ GET /redis 在redis中增加一个计数器,并显示它✅

在docker中运行rust代码❌

rust docker容器无法连接到redis docker容器
运行相同的redis docker容器 bitnami/redis ,
浏览器可以击中生 rust 的容器
localhost:3000 GET / 像以前一样显示一些文本✅ GET /redis 导致生 rust 代码死机❌
连接被拒绝(操作系统错误111)
我不确定这是否是我错误地处理“docker网络”的问题,或者是我错误地使用redis板条箱(尽管文档非常稀少)。

yfjy0ee7

yfjy0ee71#

你有这个吗 docker-compose.yaml :

services:
  hyper:
    build: .
    ports:
      - "3000:3000"
    expose:
      - "3000"
    links:
      - redis # links this container to "redis" container
  redis:
    image: "bitnami/redis:latest"
    ports:
      - "6379:6379"
    expose:
      - "6379"

从docker撰写链接上的文档:
链接服务的容器可以在与别名相同的主机名处访问,如果未指定别名,则可以在与服务名称相同的主机名处访问。
所以误差在第70行 main.rs :

let client = redis::Client::open("redis://127.0.0.1:6379")?;

这是行不通的,因为redis示例与您的rust代码不在同一个容器中运行。您必须通过docker compose文件中建立的链接连接到它,在本例中,该文件是:

let client = redis::Client::open("redis://redis:6379")?;

一旦你做了这个修正 GET localhost:3000/redis 返回成功。

相关问题