nextcloud/all-in-one · error · InvalidSettingConfigurationException

Domain must contain at least one dot!

Error message

Domain must contain at least one dot!

What it means

First syntactic check inside ConfigurationManager::setDomain() in the Nextcloud AIO mastercontainer: a submitted domain must contain at least one dot, i.e. it must be a multi-label DNS name, not a bare hostname. Violations throw InvalidSettingConfigurationException, which ConfigurationController::SetConfig converts into an HTTP 422 response whose body is exactly this message, displayed in the AIO web UI. The check runs before DNS validation and cannot be skipped by the 'skip domain validation' option.

Source

Thrown at php/src/Data/ConfigurationManager.php:599

    }

    public function getAioVersion() : string {
        $path = DataConst::GetAioVersionFile();
        if ($path !== '' && file_exists($path)) {
            return trim((string)file_get_contents($path));
        }
        return '';
    }

    /**
     * @throws InvalidSettingConfigurationException
     *
     * We can't turn this into a private validation method because of the second argument.
     */
    public function setDomain(string $domain, bool $skipDomainValidation) : void {
        // Validate that at least one dot is contained
        if (!str_contains($domain, '.')) {
            throw new InvalidSettingConfigurationException("Domain must contain at least one dot!");
        }

        // Validate that no slashes are contained
        if (str_contains($domain, '/')) {
            throw new InvalidSettingConfigurationException("Domain must not contain slashes!");
        }

        // Validate that no colons are contained
        if (str_contains($domain, ':')) {
            throw new InvalidSettingConfigurationException("Domain must not contain colons!");
        }

        // Validate domain
        if (filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) === false) {
            throw new InvalidSettingConfigurationException("Domain is not a valid domain!");
        }

        // Validate that it is not an IP-address

View on GitHub (pinned to 6b788eec5e)

Solutions

  1. Submit a fully qualified domain name such as 'cloud.example.com'
  2. Point a real (sub)domain at your server — a free deSEC or dynamic-DNS subdomain is sufficient
  3. Do not try a bare hostname: AIO's later DNS validation needs a resolvable dotted name, so a single label can never pass

Example fix

// before
domain = 'mycloud'
// after
domain = 'cloud.example.com'
Defensive patterns

Strategy: validation

Validate before calling

$domain = trim($input);
if (!str_contains($domain, '.')) {
    // reject before POSTing: AIO requires a dotted DNS name
    $errors[] = 'Domain must contain at least one dot';
}

Try / catch

use AIO\Data\InvalidSettingConfigurationException;

try {
    $configurationManager->setDomain($domain, $skipDomainValidation);
} catch (InvalidSettingConfigurationException $e) {
    // designed user-facing channel: the controller returns the message as HTTP 422 body
    $formErrors[] = $e->getMessage();
}

Prevention

When it happens

Trigger: POSTing the AIO settings form (POST /api/docker/config) with domain='mycloud', 'server' or 'nextcloud'; a typo that drops the TLD ('cloud.example'); pasting an internal single-label hostname.

Common situations: Home-lab users without a purchased domain trying a LAN hostname; users coming from tools that accept single-label hosts; scripts posting the config API with an unqualified name.

Related errors


AI-assisted analysis of nextcloud/all-in-one@6b788eec5e (2026-08-21). Data as JSON: /api/errors/623265b0d70d7004. Report an issue: GitHub.