Nextcloud系统Cron失效:php_network_getaddresses域名解析失败
Nextcloud Cron模式数据库连接错误排查与解决方案
核心问题分析
报错SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for nextcloud_db failed本质是执行Cron命令的环境无法解析数据库容器的内部主机名——Docker容器间的DNS解析依赖同一容器网络,宿主机默认无法识别容器内部的服务名。
排查与解决步骤
1. 修正Cron命令的执行环境
你当前是在宿主机直接执行php命令,这是错误的。正确操作是进入Nextcloud容器内部执行:
- 查看Nextcloud容器ID/名称:
docker ps - 进入容器:
docker exec -it <nextcloud容器名/ID> /bin/bash - 在容器内执行Cron命令(注意容器内的Nextcloud路径通常为
/var/www/html,需匹配你的volume挂载配置):
若执行成功,说明数据库连接正常,问题出在宿主机Crontab的配置方式。php -f /var/www/html/cron.php --define apc.enable_cli=1
2. 修复宿主机Crontab配置
如果要在宿主机配置Cron任务,必须通过docker exec触发容器内的命令,而非直接在宿主机运行php:
编辑宿主机crontab:
crontab -e
添加以下任务(替换容器名/ID,确保用户为www-data避免权限问题):
*/5 * * * * docker exec -u www-data <nextcloud容器名/ID> php -f /var/www/html/cron.php --define apc.enable_cli=1
3. 验证容器网络连通性
确认Nextcloud容器与数据库容器在同一Docker网络:
- 查看docker-compose.yml,两个服务是否配置了相同的
networks(未显式配置则默认在同一默认网络) - 进入Nextcloud容器测试数据库服务解析:
若无法ping通,需在docker-compose中为两个服务指定同一自定义网络:ping nextcloud_dbnetworks: nextcloud_net: driver: bridge services: nextcloud: # ...其他配置 networks: - nextcloud_net nextcloud_db: # ...其他配置 networks: - nextcloud_net
4. 确认Nextcloud配置正确性
检查config.php中的数据库配置:
dbhost必须设置为nextcloud_db(与docker-compose中数据库服务的name一致)- 确保
dbuser、dbname、dbpassword与数据库容器的环境变量完全匹配
5. 权限校验
确保Cron命令以www-data用户执行:
- 容器内执行时,可通过
su www-data切换用户后再运行命令 - 宿主机docker exec命令中添加
-u www-data参数(如步骤2所示)
内容的提问来源于stack exchange,提问作者HighT17
相关产品推荐
相关产品推荐

