From 437c44d42c72661f9b17b35f94879cf42acfecb8 Mon Sep 17 00:00:00 2001 From: Hobby-Student <6012744+Hobby-Student@users.noreply.github.com> Date: Wed, 25 Mar 2026 19:52:56 +0100 Subject: [PATCH 1/2] feat(compose): add configurable MTU for isolated networks --- .../compose/advanced/add-isolation.tsx | 41 +++++++++++++++++++ .../drizzle/0165_add_isolated_network_mtu.sql | 1 + ...{0155_snapshot.json => 0165_snapshot.json} | 0 apps/dokploy/drizzle/meta/_journal.json | 7 ++++ packages/server/src/db/schema/compose.ts | 1 + packages/server/src/utils/builders/compose.ts | 2 +- 6 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 apps/dokploy/drizzle/0165_add_isolated_network_mtu.sql rename apps/dokploy/drizzle/meta/{0155_snapshot.json => 0165_snapshot.json} (100%) diff --git a/apps/dokploy/components/dashboard/compose/advanced/add-isolation.tsx b/apps/dokploy/components/dashboard/compose/advanced/add-isolation.tsx index 0fad7d20e6..c7064f21fc 100644 --- a/apps/dokploy/components/dashboard/compose/advanced/add-isolation.tsx +++ b/apps/dokploy/components/dashboard/compose/advanced/add-isolation.tsx @@ -28,8 +28,10 @@ import { FormField, FormItem, FormLabel, + FormMessage, } from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; import { Switch } from "@/components/ui/switch"; import { api } from "@/utils/api"; @@ -40,6 +42,7 @@ interface Props { // Schema for Isolated Deployment const isolatedSchema = z.object({ isolatedDeployment: z.boolean().optional(), + isolatedNetworkMtu: z.number().int().min(68).max(9000).nullable().optional(), }); type IsolatedSchema = z.infer; @@ -63,6 +66,7 @@ export const IsolatedDeploymentTab = ({ composeId }: Props) => { const form = useForm({ defaultValues: { isolatedDeployment: false, + isolatedNetworkMtu: null, }, resolver: zodResolver(isolatedSchema), }); @@ -71,6 +75,7 @@ export const IsolatedDeploymentTab = ({ composeId }: Props) => { if (data) { form.reset({ isolatedDeployment: data?.isolatedDeployment || false, + isolatedNetworkMtu: data?.isolatedNetworkMtu ?? null, }); } }, [form, form.reset, form.formState.isSubmitSuccessful, data]); @@ -79,6 +84,7 @@ export const IsolatedDeploymentTab = ({ composeId }: Props) => { await updateCompose({ composeId, isolatedDeployment: formData?.isolatedDeployment || false, + isolatedNetworkMtu: formData?.isolatedNetworkMtu ?? null, }) .then(async (_data) => { await refetch(); @@ -180,6 +186,41 @@ export const IsolatedDeploymentTab = ({ composeId }: Props) => { /> + {form.watch("isolatedDeployment") && ( +
+ ( + +
+ + Network MTU (optional) + + + Set a custom MTU for the isolated network. Leave empty for Docker default (1500). Use 1350 for environments behind VPN/overlay networks. + +
+ + { + const val = e.target.value; + field.onChange(val === "" ? null : Number(val)); + }} + /> + + +
+ )} + /> +
+ )} +