From fd46952bfbf38f499a70aaff3cd395aa2e798f70 Mon Sep 17 00:00:00 2001 From: Vicens Juan Tomas Monserrat Date: Tue, 3 Feb 2026 12:12:28 +0100 Subject: [PATCH] feat: support custom Docker image via DOKPLOY_IMAGE env var --- packages/server/src/services/settings.ts | 26 +++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/server/src/services/settings.ts b/packages/server/src/services/settings.ts index 4235376d96..cc66cb4861 100644 --- a/packages/server/src/services/settings.ts +++ b/packages/server/src/services/settings.ts @@ -27,6 +27,9 @@ export const getDokployImageTag = () => { }; export const getDokployImage = () => { + if (process.env.DOKPLOY_IMAGE) { + return process.env.DOKPLOY_IMAGE; + } return `dokploy/dokploy:${getDokployImageTag()}`; }; @@ -59,6 +62,11 @@ export const getUpdateData = async ( currentVersion: string, ): Promise => { try { + // Skip update checks for custom images - users manage their own updates + if (process.env.DOKPLOY_IMAGE) { + return DEFAULT_UPDATE_DATA; + } + const baseUrl = "https://hub.docker.com/v2/repositories/dokploy/dokploy/tags"; let url: string | null = `${baseUrl}?page_size=100`; @@ -299,13 +307,21 @@ export const reloadDockerResource = async ( let command = ""; if (resourceType === "service") { if (resourceName === "dokploy") { - const currentImageTag = getDokployImageTag(); - let imageTag = version; - if (currentImageTag === "canary" || currentImageTag === "feature") { - imageTag = currentImageTag; + const image = getDokployImage(); + // For custom images (DOKPLOY_IMAGE), use the full image path as-is + // For canary/feature branches, keep the current tag + // For stable releases, use the provided version or current tag + let finalImage = image; + if (!process.env.DOKPLOY_IMAGE) { + const currentImageTag = getDokployImageTag(); + if (currentImageTag === "canary" || currentImageTag === "feature") { + finalImage = `dokploy/dokploy:${currentImageTag}`; + } else if (version) { + finalImage = `dokploy/dokploy:${version}`; + } } - command = `docker service update --force --image dokploy/dokploy:${imageTag} ${resourceName}`; + command = `docker service update --force --image ${finalImage} ${resourceName}`; } else { command = `docker service update --force ${resourceName}`; }