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
- Manage and validate this server on the destination Coolify instance.
- Delete the stale server row on this instance instead of validating it.
- 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
- After a transfer, retire the source instance's server row (delete it) so validation can't be attempted.
- Gate automated validation loops on $server->canBeValidated().
- Don't clear transfer metadata casually — it exists to prevent two control planes managing one host.
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
- Invalid Cron / Human expression
- Unknown notification channel [{$channel}].
- Invalid dockerfile_target_build: contains forbidden characte
- Invalid {$fieldName}: contains forbidden characters.
- Invalid {$fieldName}: path traversal detected.
AI-assisted analysis of coollabsio/coolify@70b9acc424 (2026-08-17).
Data as JSON: /api/errors/e754a54a3a785fb6.
Report an issue: GitHub.