You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker-Compose部署NextCloud遇404页面未找到,求解决方案

问题

在新服务器上通过docker-compose部署NextCloud,同一docker-compose.yml文件在另一台服务器可正常运行,但当前服务器浏览器访问站点时出现404 page not found错误。以下是NextCloud容器的日志输出:

docker logs 9730d90679df
Initializing nextcloud 25.0.3.2 ...
New nextcloud instance
Installing with MySQL database
Starting nextcloud installation
Error while trying to create admin user: Failed to connect to the database: An exception occurred in the driver: SQLSTATE[HY000] [2002] Connection refused
Trace: #0 /var/www/html/lib/private/DB/ConnectionAdapter.php(69): OC\DB\Exceptions\DbalException::wrap(Object(Doctrine\DBAL\Exception))
#1 /var/www/html/lib/private/DB/MySqlTools.php(59): OC\DB\ConnectionAdapter->executeQuery('SELECT VERSION(...')
#2 /var/www/html/lib/private/DB/MySqlTools.php(39): OC\DB\MySqlTools->isMariaDBWithLargePrefix(Object(OC\DB\ConnectionAdapter))
#3 /var/www/html/lib/private/Setup/MySQL.php(47): OC\DB\MySqlTools->supports4ByteCharset(Object(OC\DB\ConnectionAdapter))
#4 /var/www/html/lib/private/Setup.php(353): OC\Setup\MySQL->setupDatabase('adminuser')
#5 /var/www/html/core/Command/Maintenance/Install.php(105): OC\Setup->install(Array)
#6 /var/www/html/3rdparty/symfony/console/Command/Command.php(255): OC\Core\Command\Maintenance\Install->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#7 /var/www/html/3rdparty/symfony/console/Application.php(1009): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#8 /var/www/html/3rdparty/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand(Object(OC\Core\Command\Maintenance\Install), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 /var/www/html/3rdparty/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 /var/www/html/lib/private/Console/Application.php(213): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#11 /var/www/html/console.php(100): OC\Console\Application->run()
#12 /var/www/html/occ(11): require_once('/var/www/html/c...')
#13 {main}

Previous: Doctrine\DBAL\Exception: Failed to connect to the database: An exception occurred in the driver: SQLSTATE[HY000] [2002] Connection refused
Trace: #0 /var/www/html/3rdparty/doctrine/dbal/src/Connection.php(1519): OC\DB\Connection->connect()
#1 /var/www/html/3rdparty/doctrine/dbal/src/Connection.php(1041): Doctrine\DBAL\Connection->getWrappedConnection()
#2 /var/www/html/lib/private/DB/Connection.php(261): Doctrine\DBAL\Connection->executeQuery('SELECT VERSION(...', Array, Array, NULL)
#3 /var/www/html/lib/private/DB/ConnectionAdapter.php(66): OC\DB\Connection->executeQuery('SELECT VERSION(...', Array, Array)
#4 /var/www/html/lib/private/DB/MySqlTools.php(59): OC\DB\ConnectionAdapter->executeQuery('SELECT VERSION(...')
#5 /var/www/html/lib/private/DB/MySqlTools.php(39): OC\DB\MySqlTools->isMariaDBWithLargePrefix(Object(OC\DB\ConnectionAdapter))
#6 /var/www/html/lib/private/Setup/MySQL.php(47): OC\DB\MySqlTools->supports4ByteCharset(Object(OC\DB\ConnectionAdapter))
#7 /var/www/html/lib/private/Setup.php(353): OC\Setup\MySQL->setupDatabase('adminuser')
#8 /var/www/html/core/Command/Maintenance/Install.php(105): OC\Setup->install(Array)
#9 /var/www/html/3rdparty/symfony/console/Command/Command.php(255): OC\Core\Command\Maintenance\Install->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 /var/www/html/3rdparty/symfony/console/Application.php(1009): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#11 /var/www/html/3rdparty/symfony/console/Application.php(273): Symfony\Component\Console\Application->doRunCommand(Object(OC\Core\Command\Maintenance\Install), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#12 /var/www/html/3rdparty/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#13 /var/www/html/lib/private/Console/Application.php(213): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#14 /var/www/html/console.php(100): OC\Console\Application->run()
#15 /var/www/html/occ(11): require_once('/var/www/html/c...')
#16 {main}
Retrying install...
Nextcloud was successfully installed
Setting trusted domains…
System config value trusted_domains => 1 set to string MYDOMAINNAME
Initializing finished
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.19.0.5. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.19.0.5. Set the 'ServerName' directive globally to suppress this message
[Wed Feb 22 11:39:13.166800 2023] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.54 (Debian) PHP/8.1.15 configured -- resuming normal operations
[Wed Feb 22 11:39:13.166950 2023] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
解决方法

一、排查数据库连接问题(核心诱因)

日志中明确出现SQLSTATE[HY000] [2002] Connection refused错误,即使后续提示安装成功,也可能是重试时的虚假成功,导致NextCloud核心配置损坏,引发404:

  • 检查docker-compose.yml中数据库服务的配置:
    • 确保NextCloud服务与数据库服务处于同一Docker网络(默认docker-compose会创建专属网络,无需额外配置,但要确认没有手动指定不同网络)。
    • 确认NextCloud的数据库连接参数:NEXTCLOUD_DB_HOST必须填写数据库服务的名称(如服务名为db,则值为db),不能用localhost或127.0.0.1(容器内的localhost指向自身,而非数据库容器)。
    • 核对NEXTCLOUD_DB_USER、NEXTCLOUD_DB_PASSWORD、NEXTCLOUD_DB_NAME与数据库服务的环境变量(如MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE)完全一致。
  • 查看数据库容器日志:执行docker logs <db-container-id>,确认数据库是否正常启动,无初始化错误(如权限不足、密码不匹配)。
  • 清理残留数据后重新部署:
    执行以下命令彻底删除容器、网络和数据卷,避免损坏的配置残留:
    docker-compose down -v
    docker-compose up -d
    

二、解决404访问错误

1. 端口与网络检查

  • 确认docker-compose.yml中NextCloud的端口映射正确,例如:
    ports:
      - "80:80"
    
    确保服务器的防火墙/安全组已开放映射的端口(如80、443)。
  • 在服务器本地执行curl http://localhost:映射端口,测试是否能正常访问,排除外部网络问题。

2. 容器内文件与配置检查

  • 进入NextCloud容器,验证文件目录与Apache配置:
    docker exec -it <nextcloud-container-id> bash
    # 检查根目录文件是否完整
    ls -l /var/www/html
    # 检查Apache站点配置是否指向正确根目录
    cat /etc/apache2/sites-available/000-default.conf
    
    确保Apache的DocumentRoot为/var/www/html,且该目录下存在NextCloud的核心文件(如index.php、config目录)。

3. 可信域名与反向代理配置

  • 如果通过IP访问,需将服务器IP添加到NextCloud可信域名:
    docker exec -it <nextcloud-container-id> php occ config:system:set trusted_domains 2 --value=服务器公网IP
    
    (注:序号2对应第二个可信域名,若已有多个域名,需调整序号)
  • 若使用反向代理(如Nginx),需在NextCloud的config.php中添加反向代理配置:
    'trusted_proxies' => ['反向代理容器IP或服务器IP'],
    'overwritehost' => '你的域名',
    'overwriteprotocol' => 'https', # 若启用HTTPS则添加
    
    可通过以下命令进入容器修改config.php:
    docker exec -it <nextcloud-container-id> nano /var/www/html/config/config.php
    

4. 处理Apache FQDN警告

日志中的AH00558警告虽不直接导致404,但可通过在容器内添加ServerName配置消除:

docker exec -it <nextcloud-container-id> bash
echo "ServerName localhost" >> /etc/apache2/apache2.conf
service apache2 restart

内容的提问来源于stack exchange,提问作者jos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:15:27