seafile 13知识库访问报错 Error connecting to Database

使用docker部署的seafile、seadoc、notification-server,redis和mysql都是使用的宿主机的,非编排的容器,通过另一台服务器的nginx反向代理,目前访问seafile前端和上传文件都正常,访问知识库添加文件时web端报错如下

直接访问seadoc的地址如图

查看容器日志报错如图

环境变量中数据库配置

docker-compose.yml配置都是一样的没有改过

容器网络配置截图,三个容器都在一个网络中

seafile启动时候也创建了数据库实例,按理说同一个容器网络,且再seadoc访问mysql是通的,应该是不会报数据库连接错误的,为什么会产生这个问题,求解答

我服了,限制只能放一张图,多了不让发
直接访问seadoc的地址如下
Welcome to sdoc-server. The current version is 2.0.9

查看容器报错的日志

==> sdoc-server.log <==
[2026-05-10 10:59:32] [INFO] document-manager.js[104] - 0 docs saved.
[2026-05-10 10:59:32] [INFO] excalidraw-manager.js[41] - Exiting server process: 35
[2026-05-10 10:59:32] [INFO] excalidraw-manager.js[101] - 0 docs saved.
[2026-05-10 10:59:45] [INFO] www.js[25] - Starting sdoc server process: 35
[2026-05-10 11:00:36] [ERROR] document-controller.js[56] - Error connecting to Database
[2026-05-10 11:00:36] [ERROR] document-controller.js[94] - Error connecting to Database
[2026-05-10 11:00:45] [ERROR] document-controller.js[56] - Error connecting to Database
[2026-05-10 11:00:45] [ERROR] document-controller.js[94] - Error connecting to Database
[2026-05-10 11:04:45] [INFO] document-manager.js[104] - 0 docs saved.
[2026-05-10 11:04:45] [INFO] excalidraw-manager.js[101] - 0 docs saved.

.env中数据库配置

SEAFILE_MYSQL_DB_HOST=192.168.10.103
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=123456
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db

docker-compose.yml配置中mysql都是一样的没有改过

# seafile配置
 seafile:
    image: ${SEAFILE_IMAGE:-seafileltd/seafile-mc:13.0-latest}
    container_name: seafile
    restart: unless-stopped
    ports:
       - "80: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}
      - SEAFILE_MYSQL_DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty}
      - INIT_SEAFILE_MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD:-}
      - 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}

# seadoc配置
  seadoc:
    image: ${SEADOC_IMAGE:-seafileltd/sdoc-server:2.0-latest}
    container_name: seadoc
    restart: unless-stopped
    volumes:
      - ${SEADOC_VOLUME:-/opt/seadoc-data/}:/shared
    ports:
       - "8081:80"
    environment:
      - DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
      - DB_PORT=${SEAFILE_MYSQL_DB_PORT:-3306}
      - DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
      - DB_PASSWORD=${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty}
      - DB_NAME=${SEADOC_MYSQL_DB_NAME:-${SEAFILE_MYSQL_DB_SEAHUB_DB_NAME:-seahub_db}}
      - TIME_ZONE=${TIME_ZONE:-Etc/UTC}
      - JWT_PRIVATE_KEY=${JWT_PRIVATE_KEY:?Variable is not set or empty}
      - NON_ROOT=${NON_ROOT:-false}
      - SEAHUB_SERVICE_URL=${SEAFILE_SERVICE_URL:-http://seafile}

容器网络配置

[root@103 seafile]# docker network inspect c9955dfcfd5b
[
    {
        "Name": "seafile-net",
        "Id": "c9955dfcfd5bc2cb1c66dc8f446f5c2197bf3f07f6afafc4ab4885bcdce6ad01",
        "Created": "2026-04-20T00:30:06.466748411+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "192.168.80.0/20",
                    "Gateway": "192.168.80.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0d2901da415b9ba0895348d273d45601e76c1117d6c345e90469887e33341eee": {
                "Name": "notification-server",
                "EndpointID": "15fa02abad06a5effb24dbf739e292f0769e453c640d06931d5619a0694c70e6",
                "MacAddress": "02:42:c0:a8:50:04",
                "IPv4Address": "192.168.80.4/20",
                "IPv6Address": ""
            },
            "a9e2d970675eafde7ae6b603fff90fcfb6f9e36d1fc17d4d90fcab5448e3f222": {
                "Name": "seafile",
                "EndpointID": "62b175b498b6a29842d6e048bbc7e8b1f4125dd1439f12f4b057fb45460cba70",
                "MacAddress": "02:42:c0:a8:50:02",
                "IPv4Address": "192.168.80.2/20",
                "IPv6Address": ""
            },
            "b516e1369a950ad23e5297fbad30689bc0bb163bbed3e0c6c26a4f9ab6dbac63": {
                "Name": "seadoc",
                "EndpointID": "1ffac0ff5c48a159920d70d7bb54929b3e63a8db17e3777d7fe67d2b34a0163a",
                "MacAddress": "02:42:c0:a8:50:03",
                "IPv4Address": "192.168.80.3/20",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.config-hash": "7432ef8f2a2c6c0dc290d89860d2f5f1105b9def2f8918d174ebe4d623958fdb",
            "com.docker.compose.network": "seafile-net",
            "com.docker.compose.project": "seafile",
            "com.docker.compose.version": "2.32.1"
        }
    }
]

数据库实例如下

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| ccnet_db           |
| information_schema |
| performance_schema |
| seafile_db         |
| seahub_db          |
+--------------------+
5 rows in set (0.07 sec)

请教是哪里出现的问题呢

进入容器按照mysql客户端后使用容器内的变量连接数据库也正常,实在不清楚问题在哪

root@c4295103be7a:/opt/sdoc-server# env | grep -E "DB_|SEAFILE_MYSQL"
DB_PASSWORD=123456
DB_PORT=3306
DB_USER=seafile
DB_HOST=192.168.10.103
DB_NAME=seahub_db
root@c4295103be7a:/opt/sdoc-server#
root@c4295103be7a:/opt/sdoc-server# mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -e "SELECT 1"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---+
| 1 |
+---+
| 1 |
+---+

可能是代理配置有问题。
参考文档检查一下:
https://cloud.seafile.com/wiki/publish/seafile-manual/op3W/
把你的 nginx 配置发出来看一下。

    server {
        listen 80;
        server_name localhost;

        # Seafile
        location / {
            proxy_pass http://192.168.10.103:80;
            proxy_read_timeout 310s;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Connection "";
            proxy_http_version 1.1;

            client_max_body_size 0;
        }

        # Seadoc
        location /sdoc-server/ {
            proxy_pass         http://192.168.10.103:8081/;
            proxy_redirect     off;
            proxy_set_header   Host              $host;
            proxy_set_header   X-Real-IP         $remote_addr;
            proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host  $server_name;
            proxy_set_header   X-Forwarded-Proto $scheme;

            client_max_body_size 100m;
        }

        # Socket.IO for Seadoc
        location /socket.io {
            proxy_pass http://192.168.10.103:8081;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_redirect off;
            proxy_buffers 8 32k;
            proxy_buffer_size 64k;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
        }


        #notification-server
        location /notification {
            proxy_pass http://192.168.10.103:8083;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            access_log      /usr/local/nginx/logs/notification.access.log combined_realip;
            error_log       /usr/local/nginx/logs/notification.error.log;
        } 

        # SSL configuration (if needed)
        # listen 443 ssl;
        # ssl_certificate /etc/nginx/ssl/cert.pem;
        # ssl_certificate_key /etc/nginx/ssl/key.pem;
    }

这个整规saefile的nginx代理配置,麻烦大佬看看

env 文件也发一下。
然后检查一下所有机器用到的网络和端口是否都互通。
容器和本机网络是否互通。

seafile访问和上传下载文件都是正常的,目前不正常的服务只有seadoc,在seadoc容器安装mysql-client访问数据库也是正常的,上面提供了相关日志

#################################
# Docker compose configurations #
#################################
# COMPOSE_FILE='seafile-server.yml,seadoc.yml,md-server.yml,notification-server.yml'
COMPOSE_FILE='seafile-server.yml,seadoc.yml,notification-server.yml'
#COMPOSE_FILE='seafile-server.yml,seadoc.yml'
COMPOSE_PATH_SEPARATOR=','

## Images
SEAFILE_IMAGE=seafileltd/seafile-mc:13.0-latest
# SEAFILE_DB_IMAGE=mariadb:10.11
# SEAFILE_REDIS_IMAGE=redis
# SEAFILE_CADDY_IMAGE=lucaslorentz/caddy-docker-proxy:2.12-alpine
SEADOC_IMAGE=seafileltd/sdoc-server:2.0-latest
NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:13.0-latest
#MD_IMAGE=seafileltd/seafile-md-server:13.0-latest

## Persistent Storage
BASIC_STORAGE_PATH=/data/seafile
SEAFILE_VOLUME=$BASIC_STORAGE_PATH/seafile-data
# SEAFILE_MYSQL_VOLUME=$BASIC_STORAGE_PATH/seafile-mysql/db
# SEAFILE_CADDY_VOLUME=$BASIC_STORAGE_PATH/seafile-caddy
SEADOC_VOLUME=$BASIC_STORAGE_PATH/seadoc-data

#################################
#      Startup parameters       #
#################################
SEAFILE_SERVER_HOSTNAME=192.168.10.102:80
SEAFILE_SERVER_PROTOCOL=http
TIME_ZONE=Asia/Shanghai
JWT_PRIVATE_KEY=dsdsg4t43f23frh643f

#####################################
# Third-party service configuration #
#####################################

## Database
DB_HOST=192.168.10.103
DB_PASSWORD=123456
DB_PORT=3306
DB_USER=seafile
DB_NAME=seahub_db

SEAFILE_MYSQL_DB_HOST=192.168.10.103
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=123456
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db

## Cache
CACHE_PROVIDER=redis # or memcached

### Redis
REDIS_HOST=192.168.10.104
REDIS_PORT=6379
REDIS_PASSWORD=QAZwsx@123

### Memcached
#MEMCACHED_HOST=memcached
#MEMCACHED_PORT=11211

######################################
#        Initial variables           #
# (Only valid in first-time startup) #
######################################

## Database root password, Used to create Seafile users
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=123456

## Seafile admin user
INIT_SEAFILE_ADMIN_EMAIL=i@ogsun.cn
INIT_SEAFILE_ADMIN_PASSWORD=123456

############################################
# Additional configurations for extensions #
############################################

## SeaDoc service
ENABLE_SEADOC=true

## Notification
ENABLE_NOTIFICATION_SERVER=true
NOTIFICATION_SERVER_URL=

## Seafile AI
ENABLE_SEAFILE_AI=false
ENABLE_FACE_RECOGNITION=false
SEAFILE_AI_LLM_TYPE=openai
SEAFILE_AI_LLM_URL=
SEAFILE_AI_LLM_KEY= # your llm key
SEAFILE_AI_LLM_MODEL=gpt-4o-mini

## Metadata server
#MD_FILE_COUNT_LIMIT=100000
## Metadata Server Chche Size
#MD_MAX_CACHE_SIZE=1GB
```

1.检查一下 seahub_db.sdoc_operation_log 表是否创建成功,检查 seafile 用户是否对数据库有完整的访问权限。
2.env 文件里有些配置写的不对,比如有两段数据库配置,SEAFILE_SERVER_HOSTNAME 只有在使用非常规端口时才需要带端口。仔细参考官方文档进行检查。
3.nginx 代理 server_name 建议改成具体地址。
4.去日志文件中查看报错信息,不要只看控制台报错和容器报错。日志文件里的报错信息更有利于判断问题所在。

最后,建议参考官方文档按照标准化的方式进行部署。