redis.exceptions.ConnectionError:连接到容器中的 redis 服务器时出错

redis.exceptions.ConnectionError on connecting to redis server in container

提问人:user2622678 提问时间:11/17/2023 更新时间:11/17/2023 访问量:28

问:

我创建了一个包含以下内容的 Dockerfile

FROM alpine

# Run commands to install additional software
RUN apk add --update redis

# Specify command to run when the container starts up
CMD ["redis-server"]

然后运行 docker build 并运行命令

docker build -t dkr/redis:latest .
docker run -p 6379:6379  dkr/redis

然后,当我尝试从主机连接到容器中运行的redis服务器时,出现以下错误。从主机连接到 Redis 的正确方法是什么?

import redis
r = redis.Redis(host='127.0.0.1', port=6379, decode_responses=True)
>>> r.set("visits", "1")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/staging/venv/lib/python3.7/site-packages/redis/commands/core.py", line 2341, in set
    return self.execute_command("SET", *pieces, **options)
  File "/staging/venv/lib/python3.7/site-packages/redis/client.py", line 533, in execute_command
    conn = self.connection or pool.get_connection(command_name, **options)
  File "/staging/venv/lib/python3.7/site-packages/redis/connection.py", line 1086, in get_connection
    connection.connect()
  File "/staging/venv/lib/python3.7/site-packages/redis/connection.py", line 276, in connect
    self.on_connect()
  File "/staging/venv/lib/python3.7/site-packages/redis/connection.py", line 386, in on_connect
    self.read_response()
  File "/staging/venv/lib/python3.7/site-packages/redis/connection.py", line 500, in read_response
    response = self._parser.read_response(disable_decoding=disable_decoding)
  File "/staging/venv/lib/python3.7/site-packages/redis/_parsers/resp2.py", line 15, in read_response
    result = self._read_response(disable_decoding=disable_decoding)
  File "/staging/venv/lib/python3.7/site-packages/redis/_parsers/resp2.py", line 25, in _read_response
    raw = self._buffer.readline()
  File "/staging/venv/lib/python3.7/site-packages/redis/_parsers/socket.py", line 115, in readline
    self._read_from_socket()
  File "/staging/venv/lib/python3.7/site-packages/redis/_parsers/socket.py", line 68, in _read_from_socket
    raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR)
redis.exceptions.ConnectionError: Connection closed by server.
docker redis 容器 py-redis

评论

0赞 David Maze 11/17/2023
Redis 容器是否实际运行?应用程序是直接在主机上运行,还是在容器中运行?您使用的是哪种“类型”的 Docker(直接在原生 Linux 上使用 Docker、Docker Desktop 等)?
0赞 user2622678 11/18/2023
@DavidMaze 容器正在运行。我在主机中运行 python 脚本。Docker 在本机 Linux 上运行
1赞 David Maze 11/18/2023
您是否更改了 Redis 配置以侦听所有接口,并注释掉了该行?另请参阅 Docker 应用服务器 IP 地址 127.0.0.1 与 0.0.0.0 IP 的区别bind 127.0.0.1

答: 暂无答案