diff --git a/app/react/docker/containers/CreateView/CreateView.tsx b/app/react/docker/containers/CreateView/CreateView.tsx index d7c0f938e..1e39a193b 100644 --- a/app/react/docker/containers/CreateView/CreateView.tsx +++ b/app/react/docker/containers/CreateView/CreateView.tsx @@ -20,7 +20,7 @@ import { TextTip } from '@@/Tip/TextTip'; import { HelpLink } from '@@/HelpLink'; import { useContainers } from '../queries/containers'; -import { useSystemLimits } from '../../proxy/queries/useInfo'; +import { useSystemLimits, useIsWindows } from '../../proxy/queries/useInfo'; import { useCreateOrReplaceMutation } from './useCreateMutation'; import { useValidation } from './validation'; @@ -48,6 +48,7 @@ export function CreateView() { function CreateForm() { const environmentId = useEnvironmentId(); const router = useRouter(); + const isWindows = useIsWindows(environmentId); const { trackEvent } = useAnalytics(); const isAdminQuery = useIsEdgeAdmin(); const { authorized: isEnvironmentAdmin } = useIsEnvironmentAdmin({ @@ -57,7 +58,8 @@ function CreateForm() { const mutation = useCreateOrReplaceMutation(); const initialValuesQuery = useInitialValues( - mutation.isLoading || mutation.isSuccess + mutation.isLoading || mutation.isSuccess, + isWindows ); const registriesQuery = useEnvironmentRegistries(environmentId); @@ -84,9 +86,11 @@ function CreateForm() { const environment = envQuery.data; + // if windows, hide capabilities. this is because capadd and capdel are not supported on windows const hideCapabilities = - !environment.SecuritySettings.allowContainerCapabilitiesForRegularUsers && - !isEnvironmentAdmin; + (!environment.SecuritySettings.allowContainerCapabilitiesForRegularUsers && + !isEnvironmentAdmin) || + isWindows; const { isDuplicating = false, diff --git a/app/react/docker/containers/CreateView/NetworkTab/toViewModel.ts b/app/react/docker/containers/CreateView/NetworkTab/toViewModel.ts index 710f2992c..b73fdfe69 100644 --- a/app/react/docker/containers/CreateView/NetworkTab/toViewModel.ts +++ b/app/react/docker/containers/CreateView/NetworkTab/toViewModel.ts @@ -5,9 +5,10 @@ import { DockerContainer } from '../../types'; import { CONTAINER_MODE, Values } from './types'; -export function getDefaultViewModel() { +export function getDefaultViewModel(isWindows: boolean) { + const networkMode = isWindows ? 'nat' : 'bridge'; return { - networkMode: 'bridge', + networkMode, hostname: '', domain: '', macAddress: '', diff --git a/app/react/docker/containers/CreateView/useInitialValues.ts b/app/react/docker/containers/CreateView/useInitialValues.ts index de624497f..03811f821 100644 --- a/app/react/docker/containers/CreateView/useInitialValues.ts +++ b/app/react/docker/containers/CreateView/useInitialValues.ts @@ -57,7 +57,7 @@ export interface Values extends BaseFormValues { env: EnvVarValues; } -export function useInitialValues(submitting: boolean) { +export function useInitialValues(submitting: boolean, isWindows: boolean) { const { params: { nodeName, from }, } = useCurrentStateAndParams(); @@ -86,7 +86,7 @@ export function useInitialValues(submitting: boolean) { if (!from) { return { - initialValues: defaultValues(isPureAdmin, user.Id, nodeName), + initialValues: defaultValues(isPureAdmin, user.Id, nodeName, isWindows), }; } @@ -151,12 +151,13 @@ export function useInitialValues(submitting: boolean) { function defaultValues( isPureAdmin: boolean, currentUserId: UserId, - nodeName: string + nodeName: string, + isWindows: boolean ): Values { return { commands: commandsTabUtils.getDefaultViewModel(), volumes: volumesTabUtils.getDefaultViewModel(), - network: networkTabUtils.getDefaultViewModel(), + network: networkTabUtils.getDefaultViewModel(isWindows), // windows containers should default to the nat network, not the bridge labels: labelsTabUtils.getDefaultViewModel(), restartPolicy: restartPolicyTabUtils.getDefaultViewModel(), resources: resourcesTabUtils.getDefaultViewModel(), diff --git a/app/react/docker/proxy/queries/useInfo.ts b/app/react/docker/proxy/queries/useInfo.ts index 7b71cdb11..770a4154c 100644 --- a/app/react/docker/proxy/queries/useInfo.ts +++ b/app/react/docker/proxy/queries/useInfo.ts @@ -34,6 +34,14 @@ export function useInfo( ); } +export function useIsWindows(environmentId: EnvironmentId) { + const query = useInfo(environmentId, { + select: (info) => info.OSType === 'windows', + }); + + return !!query.data; +} + export function useIsStandAlone(environmentId: EnvironmentId) { const query = useInfo(environmentId, { select: (info) => !info.Swarm?.NodeID,