在 Docker 中运行 Redis 服务器时出现连接错误

Jam*_*lor 5 redis docker

我有以下 Python 脚本example.py

import redis
r = redis.Redis()
r.set('a','b')
Run Code Online (Sandbox Code Playgroud)

以及以下内容Dockerfile

FROM ubuntu:18.04

# Install system-wide dependencies
RUN apt-get -yqq update
RUN apt-get -yqq install python3-dev python3-pip
RUN apt-get -yqq install redis-tools redis-server

RUN pip3 install redis

# Copy application code
ADD . /usr/local/example
WORKDIR /usr/local/example

# Start application
CMD /etc/init.d/redis-server restart \
        && python3 example.py
Run Code Online (Sandbox Code Playgroud)

在我构建容器 ( docker build -t redis-example .) 并运行它 ( docker run -P -it -d redis-example) 后,将打印以下堆栈跟踪:

Stopping redis-server: redis-server.
Starting redis-server: redis-server.
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 484, in connect
    sock = self._connect()
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 541, in _connect
    raise err
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 529, in _connect
    sock.connect(socket_address)
OSError: [Errno 99] Cannot assign requested address

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/redis/client.py", line 667, in execute_command
    connection.send_command(*args)
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 610, in send_command
    self.send_packed_command(self.pack_command(*args))
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 585, in send_packed_command
    self.connect()
  File "/usr/local/lib/python3.6/dist-packages/redis/connection.py", line 489, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 99 connecting to localhost:6379. Cannot assign requested address.
Run Code Online (Sandbox Code Playgroud)

我不确定为什么这个非常简单的例子在 Docker 中失败了。我想运行 Docker 容器本地的 Redis 服务器实例。

它不需要在容器外部可访问,并且应该是容器独有的。

如何解决此异常?