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)完全一致。
- 确保NextCloud服务与数据库服务处于同一Docker网络(默认
- 查看数据库容器日志:执行
docker logs <db-container-id>,确认数据库是否正常启动,无初始化错误(如权限不足、密码不匹配)。 - 清理残留数据后重新部署:
执行以下命令彻底删除容器、网络和数据卷,避免损坏的配置残留:docker-compose down -v docker-compose up -d
二、解决404访问错误
1. 端口与网络检查
- 确认
docker-compose.yml中NextCloud的端口映射正确,例如:
确保服务器的防火墙/安全组已开放映射的端口(如80、443)。ports: - "80:80" - 在服务器本地执行
curl http://localhost:映射端口,测试是否能正常访问,排除外部网络问题。
2. 容器内文件与配置检查
- 进入NextCloud容器,验证文件目录与Apache配置:
确保Apache的docker exec -it <nextcloud-container-id> bash # 检查根目录文件是否完整 ls -l /var/www/html # 检查Apache站点配置是否指向正确根目录 cat /etc/apache2/sites-available/000-default.confDocumentRoot为/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=服务器公网IP2对应第二个可信域名,若已有多个域名,需调整序号) - 若使用反向代理(如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
相关产品推荐
相关产品推荐

