coollabsio/coolify · error · Exception

This server was transferred to another Coolify instance and

Error message

This server was transferred to another Coolify instance and cannot be revalidated here.

What it means

ValidateServer::handle() starts with Server::canBeValidated(), which returns false when server_metadata.transfer.status === 'transferred' — the server was migrated to a different Coolify instance and this instance still holds the source-side row (see Server::isTransferredAway(), app/Models/Server.php:869). The action writes the error into validation_logs, clears is_validating, and throws, refusing to revalidate or reinstall against a host that now belongs to another control plane.

Source

Thrown at app/Actions/Server/ValidateServer.php:34

    public ?string $error = null;

    public ?string $supported_os_type = null;

    public ?string $docker_installed = null;

    public ?string $docker_compose_installed = null;

    public ?string $docker_version = null;

    public function handle(Server $server)
    {
        if (! $server->canBeValidated()) {
            $this->error = 'This server was transferred to another Coolify instance and cannot be revalidated here.';
            $server->update([
                'validation_logs' => $this->error,
                'is_validating' => false,
            ]);
            throw new \Exception($this->error);
        }

        $server->update([
            'validation_logs' => null,
        ]);
        if ($server->vultr_instance_id) {
            $status = $server->refreshVultrState();
            if (in_array($status, ['stopped', 'suspended', 'deleted'], true)) {
                $this->error = $status === 'deleted'
                    ? 'Vultr instance is deleted or no longer accessible. Relink this server before validating.'
                    : 'Vultr instance is '.($status ?? 'not running').'. Power it on before validating.';
                $server->update([
                    'validation_logs' => $this->error,
                ]);
                throw new \Exception($this->error);
            }
        }

View on GitHub (pinned to 70b9acc424)

Solutions

  1. Manage and validate this server on the destination Coolify instance.
  2. Delete the stale server row on this instance instead of validating it.
  3. If the transfer was wrong or must be undone, clear server_metadata.transfer.status on the source instance so canBeValidated() passes again.
Defensive patterns

Strategy: validation

Validate before calling

if (! $server->canBeValidated()) {
    return 'Server was transferred to another Coolify instance. Manage it there, or delete the stale row here.';
}
ValidateServer::run($server);

Type guard

// Server::canBeValidated() already is the guard
if ($server->canBeValidated()) {
    ValidateServer::run($server);
}

Try / catch

try {
    ValidateServer::run($server);
} catch (\Exception $e) {
    if (str_contains($e->getMessage(), 'transferred to another Coolify instance')) {
        // permanent state: stop automation against this row; the error is already in validation_logs
    } else {
        throw $e;
    }
}

Prevention

When it happens

Trigger: Completing (or starting) a server transfer to instance B, then hitting Validate/Install on instance A which still lists the server; automation still pointed at the old Coolify instance after a migration.

Common situations: Multi-instance setups after a server transfer; stale UI on the source instance; abandoned transfer flows where the metadata was already marked transferred.

Related errors


AI-assisted analysis of coollabsio/coolify@70b9acc424 (2026-08-17). Data as JSON: /api/errors/e754a54a3a785fb6. Report an issue: GitHub.