{"record":{"id":"d42f94775317e1c8","repo":"louislam/uptime-kuma","slug":"none-of-the-configured-resolver-servers-could-be-r","errorCode":null,"errorMessage":"None of the configured resolver servers could be resolved to an IP address. Please provide a comma-separated list of valid resolver hostnames or IP addresses.","messagePattern":"None of the configured resolver servers could be resolved to an IP address\\. Please provide a comma-separated list of valid resolver hostnames or IP addresses\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/monitor-types/dns.js","lineNumber":159,"sourceCode":"                ...(v4.status === \"fulfilled\" ? v4.value : []),\n                ...(v6.status === \"fulfilled\" ? v6.value : []),\n            ];\n\n            if (!addrs.length) {\n                log.error(\"DNS\", `Invalid resolver server ${e}`);\n            }\n            return addrs;\n        });\n\n        // [[ips of hostname1],[ips hostname2],...]\n        const ips = await Promise.all(promises);\n        // Append all the ips in [[]] to a single []\n        const parsed = ips.flat();\n\n        // only the resolver resolution can discard an address\n        // -> no special error message for only the net.isIP case is necessary\n        if (!parsed.length) {\n            throw new Error(\n                \"None of the configured resolver servers could be resolved to an IP address. Please provide a comma-separated list of valid resolver hostnames or IP addresses.\"\n            );\n        }\n        return parsed;\n    }\n\n    /**\n     * Resolves a given record using the specified DNS server\n     * @param {string} hostname The hostname of the record to lookup\n     * @param {string[]} resolverServer Array of DNS server IP addresses to use\n     * @param {string} resolverPort Port the DNS server is listening on\n     * @param {string} rrtype The type of record to request\n     * @returns {Promise<(string[] | object[] | object)>} DNS response\n     */\n    async dnsResolve(hostname, resolverServer, resolverPort, rrtype) {\n        const resolver = new Resolver();\n        resolver.setServers(resolverServer.map((server) => `[${server}]:${resolverPort}`));\n        if (rrtype === \"PTR\") {","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/louislam/uptime-kuma/blob/6b5ea0155793e666666745fb8d6fef1e829543a2/server/monitor-types/dns.js#L141-L177","documentation":"Thrown by DnsMonitorType.resolveDnsResolverServers when every supplied resolver entry either failed DNS resolution (both A and AAAA returned no records) or was logged as invalid. IP literals are always kept, so this error implies no entry was an IP and no hostname resolved.","triggerScenarios":"Run a DNS monitor whose dnsResolveServer lists only unreachable or non-existent hostnames (e.g. \"adguard.local\" on a network where that name does not resolve, or a typo like \"one.one.one.on\"). The Promise.allSettled for resolve4/resolve6 both reject for each hostname.","commonSituations":"Docker container hostname (adguard, pihole) referenced before the container network is up; DNS-over-HTTPS hostname that no longer resolves; transient network outage at monitor runtime; typo in the resolver hostname.","solutions":["Include at least one IP literal (e.g. \"1.1.1.1\") as a fallback alongside hostnames.","Verify each hostname resolves from the Uptime-Kuma host: `nslookup adguard.local`.","For container hostnames, ensure Uptime-Kuma runs on the same Docker network or the name is in /etc/hosts."],"exampleFix":"// before\n{ type: \"dns\", dnsResolveServer: \"adguard.local\" }\n// after\n{ type: \"dns\", dnsResolveServer: \"adguard.local,1.1.1.1\" }","handlingStrategy":"fallback","validationCode":"function resilientResolvers(raw) {\n  const list = String(raw || \"\").replace(/\\s/g, \"\").split(\",\").filter(Boolean);\n  const hasIpLiteral = list.some(net.isIP);\n  return hasIpLiteral ? list : [...list, \"1.1.1.1\"];\n}","typeGuard":"function hasAtLeastOneIpLiteral(list) {\n  return list.some(s => net.isIP(s) > 0);\n}","tryCatchPattern":"try {\n  await dnsMonitor.monitor(...);\n} catch (e) {\n  if (/None of the configured resolver servers/.test(e.message)) {\n    monitor.dnsResolveServer = \"1.1.1.1\";\n    return retry();\n  }\n  throw e;\n}","preventionTips":["Always include one public IP literal as a fallback alongside hostnames.","For container hostnames, confirm reachability from the Uptime-Kuma host first."],"tags":["monitor","dns","network","resolution","uptime-kuma"],"backgroundTag":null,"analyzedSha":"6b5ea0155793e666666745fb8d6fef1e829543a2","analyzedAt":"2026-08-12T23:42:12.959Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}