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

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挂载配置):
    php -f /var/www/html/cron.php --define apc.enable_cli=1
    
    若执行成功,说明数据库连接正常,问题出在宿主机Crontab的配置方式。

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 nextcloud_db
    
    若无法ping通,需在docker-compose中为两个服务指定同一自定义网络:
    networks:
      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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:32:03