请教个redis Error 111 connecting to localhost:6379的问题,谢谢。

尝试从V12升级社区版13.0.9,启动过程中发现seahub报错localhost:6379连接拒绝。

redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused.

下面是env的REDIS相关配置

### Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=*********

下面是seafile.yml中redis相关配置

      - CACHE_PROVIDER=${CACHE_PROVIDER:-redis}
      - REDIS_HOST=${REDIS_HOST:-redis}
      - REDIS_PORT=${REDIS_PORT:-6379}
      - REDIS_PASSWORD=${REDIS_PASSWORD:-}

尝试做过以下修改:

env以及seafile.yml中的REDIS_HOST分别改成“redis” 、映射redis容器端口后REDIS_HOST改成宿主机IP、以及容器172的地址。端口映射后尝试telnet 6379端口可以连通。

但无论怎样seahub都是同样的提示错误localhost:6379。 感觉seahub默认访问的就是localhost:6379而没有从配置文件读取对应host。

请问以下是我哪里配置的有问题么?

完整的ENV:

COMPOSE_FILE='seafile-server.yml,seadoc.yml'
COMPOSE_PATH_SEPARATOR=','


SEAFILE_IMAGE=seafileltd/seafile-mc:13.0-latest
SEAFILE_DB_IMAGE=mariadb:10.11
SEAFILE_MEMCACHED_IMAGE=memcached:1.6.29
SEAFILE_REDIS_IMAGE=redis

SEAFILE_VOLUME=/opt/seafile-data
SEAFILE_MYSQL_VOLUME=/opt/seafile-mysql/db

SEAFILE_MYSQL_DB_HOST=db
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=*******
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=*******

TIME_ZONE=Asia/Shanghai

JWT_PRIVATE_KEY=**************************

SEAFILE_SERVER_HOSTNAME=192.168.1.200:60000
SEAFILE_SERVER_PROTOCOL=http

INIT_SEAFILE_ADMIN_EMAIL=admin
INIT_SEAFILE_ADMIN_PASSWORD=********



SEADOC_IMAGE=seafileltd/sdoc-server:2.0-latest
SEADOC_VOLUME=/opt/seadoc-data

ENABLE_SEADOC=true

NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:13.0-latest
NOTIFICATION_SERVER_VOLUME=/opt/notification-data

## Cache
CACHE_PROVIDER=redis
### Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=*******


SEAF_SERVER_STORAGE_TYPE=

完整的seafile.yml

services:
  db:
    image: ${SEAFILE_DB_IMAGE:-mariadb:10.11}
    container_name: seafile-mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-}
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      - "${SEAFILE_MYSQL_VOLUME:-/opt/seafile-mysql/db}:/var/lib/mysql"
    networks:
      - seafile-net
    healthcheck:
      test:
        [
          "CMD",
          "/usr/local/bin/healthcheck.sh",
          "--connect",
          "--mariadbupgrade",
          "--innodb_initialized",
        ]
      interval: 20s
      start_period: 30s
      timeout: 5s
      retries: 10

  redis:
    image: ${SEAFILE_REDIS_IMAGE:-redis}
    container_name: seafile-redis
    restart: unless-stopped
    command:
      - /bin/sh
      - -c
      - redis-server --requirepass "$$REDIS_PASSWORD"
    environment:
      - REDIS_PASSWORD=${REDIS_PASSWORD:-}
    networks:
      - seafile-net

  seafile:
    image: ${SEAFILE_IMAGE:-seafileltd/seafile-mc:13.0-latest}
    container_name: seafile
    restart: unless-stopped
    ports:
      - "60000:80"
    volumes:
      - ${SEAFILE_VOLUME:-/opt/seafile-data}:/shared
    environment:
      - SEAFILE_MYSQL_DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
      - SEAFILE_MYSQL_DB_PORT=${SEAFILE_MYSQL_DB_PORT:-3306}
      - SEAFILE_MYSQL_DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
      - INIT_SEAFILE_MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-}
      - SEAFILE_MYSQL_DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty}

      - SEAFILE_MYSQL_DB_CCNET_DB_NAME=${SEAFILE_MYSQL_DB_CCNET_DB_NAME:-ccnet_db}
      - SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=${SEAFILE_MYSQL_DB_SEAFILE_DB_NAME:-seafile_db}
      - SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}
      - TIME_ZONE=${TIME_ZONE:-Etc/UTC}
      - INIT_SEAFILE_ADMIN_EMAIL=${INIT_SEAFILE_ADMIN_EMAIL:-me@example.com}
      - INIT_SEAFILE_ADMIN_PASSWORD=${INIT_SEAFILE_ADMIN_PASSWORD:-asecret}
      - SEAFILE_SERVER_HOSTNAME=${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
      - SEAFILE_SERVER_PROTOCOL=${SEAFILE_SERVER_PROTOCOL:-http}
      - SITE_ROOT=${SITE_ROOT:-/}
      - NON_ROOT=${NON_ROOT:-false}
      - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
      - SEAFILE_LOG_TO_STDOUT=${SEAFILE_LOG_TO_STDOUT:-false}
      - ENABLE_SEADOC=${ENABLE_SEADOC:-true}
      - SEADOC_SERVER_URL=${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}/sdoc-server
      - CACHE_PROVIDER=${CACHE_PROVIDER:-redis}
      - REDIS_HOST=${REDIS_HOST:-redis}
      - REDIS_PORT=${REDIS_PORT:-6379}
      - REDIS_PASSWORD=${REDIS_PASSWORD:-}
      - MEMCACHED_HOST=${MEMCACHED_HOST:-memcached}
      - MEMCACHED_PORT=${MEMCACHED_PORT:-11211}
      - ENABLE_NOTIFICATION_SERVER=${ENABLE_NOTIFICATION_SERVER:-false}
      - INNER_NOTIFICATION_SERVER_URL=${INNER_NOTIFICATION_SERVER_URL:-http://notification-server:8083}
      -  NOTIFICATION_SERVER_URL=${NOTIFICATION_SERVER_URL:-${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}/notification}
      - ENABLE_SEAFILE_AI=${ENABLE_SEAFILE_AI:-false}
      - SEAFILE_AI_SERVER_URL=${SEAFILE_AI_SERVER_URL:-http://seafile-ai:8888}
      - SEAFILE_AI_SECRET_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
      - MD_FILE_COUNT_LIMIT=${MD_FILE_COUNT_LIMIT:-100000}
    #labels:
    #caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
    #caddy.reverse_proxy: "{{upstreams 80}}"
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    networks:
      - seafile-net

networks:
  seafile-net:
    name: seafile-net

修改env配置后需要重启服务,可以结合docker compose logs -f 容器日志和 seahub.log日志看下redis配置是否生效

修改env或yml的配置后,用docker compose down 然后重新up -d。可以看到容器recreate的提示,但是日志仍然提示localhost:6379连接被拒绝。

进入seafile容器内部,查看文件:/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py

可以发现不管外部.env 或yml怎么修改,这里的host 仍然是localhost。

class Connection(AbstractConnection):
    "Manages TCP communication to and from a Redis server"

    def __init__(
        self,
        host="localhost",
        port=6379,
        socket_keepalive=False,
        socket_keepalive_options=None,
        socket_type=0,
        **kwargs,
    ):

尝试将其修改为redis后,docker restart seafile重启容器。然后产生了新的报错:

[2025-09-13 16:36:27] [ERROR] seahub.organizations:14 <module> No module named 'seahub_custom_functions'
[2025-09-13 16:37:06] [ERROR] django.request:253 log_response Internal Server Error: /
Traceback (most recent call last):
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/django/utils/deprecation.py", line 119, in __call__
    response = self.process_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/seahub/base/middleware.py", line 105, in process_request
    cur_note = cache.get('CUR_TOPINFO') if cache.get('CUR_TOPINFO') else \
                                           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/django/core/cache/backends/redis.py", line 188, in get
    return self._cache.get(key, default)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/django/core/cache/backends/redis.py", line 100, in get
    value = client.get(key)
            ^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/commands/core.py", line 1829, in get
    return self.execute_command("GET", name, keys=[name])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/client.py", line 623, in execute_command
    return self._execute_command(*args, **options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/client.py", line 629, in _execute_command
    conn = self.connection or pool.get_connection()
                              ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/utils.py", line 191, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 1530, in get_connection
    connection.connect()
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 379, in connect
    self.connect_check_health(check_health=True)
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 397, in connect_check_health
    self.on_connect_check_health(check_health=check_health)
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 469, in on_connect_check_health
    auth_response = self.read_response()
                    ^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 644, in read_response
    response = self._parser.read_response(disable_decoding=disable_decoding)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/_parsers/resp2.py", line 15, in read_response
    result = self._read_response(disable_decoding=disable_decoding)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/_parsers/resp2.py", line 38, in _read_response
    raise error
redis.exceptions.AuthenticationError: invalid username-password pair or user is disabled.
[2025-09-13 16:37:06] [ERROR] django.request:253 log_response Internal Server Error: /favicon.ico
Traceback (most recent call last):
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/django/utils/deprecation.py", line 119, in __call__
    response = self.process_request(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/seahub/base/middleware.py", line 105, in process_request
    cur_note = cache.get('CUR_TOPINFO') if cache.get('CUR_TOPINFO') else \
                                           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/django/core/cache/backends/redis.py", line 188, in get
    return self._cache.get(key, default)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/django/core/cache/backends/redis.py", line 100, in get
    value = client.get(key)
            ^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/commands/core.py", line 1829, in get
    return self.execute_command("GET", name, keys=[name])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/client.py", line 623, in execute_command
    return self._execute_command(*args, **options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/client.py", line 629, in _execute_command
    conn = self.connection or pool.get_connection()
                              ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/utils.py", line 191, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 1530, in get_connection
    connection.connect()
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 379, in connect
    self.connect_check_health(check_health=True)
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 397, in connect_check_health
    self.on_connect_check_health(check_health=check_health)
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 469, in on_connect_check_health
    auth_response = self.read_response()
                    ^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/connection.py", line 644, in read_response
    response = self._parser.read_response(disable_decoding=disable_decoding)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/_parsers/resp2.py", line 15, in read_response
    result = self._read_response(disable_decoding=disable_decoding)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/seafile/seafile-server-13.0.9/seahub/thirdpart/redis/_parsers/resp2.py", line 38, in _read_response
    raise error
redis.exceptions.AuthenticationError: invalid username-password pair or user is disabled.

seahub_settings.py 中的 cache 配置去掉了吗?

去掉了,只保留了 SECRET_KEY SERVICE_URL TIME_ZONE FILE_SERVER_ROOT四条配置。