如何通过CLI连接到在Docker容器中运行的Redis

dav*_*vid 4 python redis

码头工人组成

web:
  container_name: authserver
  restart: always
  build: ./authserver
  expose:
    - "8000"
  links:
    - redis:redis
  environment:
    DEBUG: 'true'

redis:
  restart: always
  image: redis:latest
  ports:
    - "6379:6379"
Run Code Online (Sandbox Code Playgroud)

码头工人检查authserver_redis_1

    "Gateway": "172.17.0.1",
    "IPAddress": "172.17.0.3",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "02:42:ac:11:00:03"
Run Code Online (Sandbox Code Playgroud)

从主机上的Python解释器(即从运行docker-compose的位置开始),我可以使用Redis并获取/设置值

client = redis.StrictRedis(host='172.17.0.3', port=6379, db=0)

client.set("key01", "value01")
print client.get("key01")
>>>>"value01"
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,如果我从命令行运行redis-cli

redis-cli -h 172.17.0.3 -p 6379
Run Code Online (Sandbox Code Playgroud)

在同一台主机上(与Python解释器进行交互的同一台机器上),然后运行HGETALL *,我希望返回key01和value01,但是它将返回

(empty list or set)
Run Code Online (Sandbox Code Playgroud)

我在阅读redis-cli和python redis库文档时都遇到了麻烦,所以我猜我做错了一些事情。

Chr*_*ner 5

ports:
    - "6379:6379"
Run Code Online (Sandbox Code Playgroud)

这会将redis从容器转发到您的主机,因此您应该能够连接到localhost,就好像redis直接在运行您的计算机一样。如果这不起作用,您可以通过运行更多挖掘

docker ps
Run Code Online (Sandbox Code Playgroud)

获取正在运行的容器ID的列表,然后

docker exec -it <redis container ID> redis-cli
Run Code Online (Sandbox Code Playgroud)

直接连接到您的redis容器并运行redis-cli。