@@ -154,7 +154,7 @@ export async function getExtendImageBuildInfo(params: DockerResolverParameters,
154154 }
155155 } ;
156156 }
157- return { featureBuildInfo : getImageBuildOptions ( params , config , dstFolder , baseName , imageBuildInfo ) } ;
157+ return { featureBuildInfo : await getImageBuildOptions ( params , config , dstFolder , baseName , imageBuildInfo ) } ;
158158 }
159159
160160 // Generates the end configuration.
@@ -193,24 +193,24 @@ export interface ImageBuildOptions {
193193 securityOpts : string [ ] ;
194194}
195195
196- function getImageBuildOptions ( params : DockerResolverParameters , config : SubstitutedConfig < DevContainerConfig > , dstFolder : string , baseName : string , imageBuildInfo : ImageBuildInfo ) : ImageBuildOptions {
197- const syntax = imageBuildInfo . dockerfile ?. preamble . directives . syntax ;
198- return {
199- dstFolder,
200- dockerfileContent : `
196+ async function getImageBuildOptions ( params : DockerResolverParameters , config : SubstitutedConfig < DevContainerConfig > , dstFolder : string , baseName : string , imageBuildInfo : ImageBuildInfo ) : Promise < ImageBuildOptions > {
197+ const syntax = imageBuildInfo . dockerfile ?. preamble . directives . syntax ;
198+ return {
199+ dstFolder,
200+ dockerfileContent : `
201201FROM $_DEV_CONTAINERS_BASE_IMAGE AS dev_containers_target_stage
202202${ getDevcontainerMetadataLabel ( getDevcontainerMetadata ( imageBuildInfo . metadata , config , { featureSets : [ ] } , [ ] , getOmitDevcontainerPropertyOverride ( params . common ) ) ) }
203203` ,
204- overrideTarget : 'dev_containers_target_stage' ,
205- dockerfilePrefixContent : `${ syntax ? `# syntax=${ syntax } ` : '' }
206- ARG _DEV_CONTAINERS_BASE_IMAGE=placeholder
204+ overrideTarget : 'dev_containers_target_stage' ,
205+ dockerfilePrefixContent : `${ syntax ? `# syntax=${ syntax } ` : '' }
206+ ARG _DEV_CONTAINERS_BASE_IMAGE=placeholder
207207` ,
208- buildArgs : {
209- _DEV_CONTAINERS_BASE_IMAGE : baseName ,
210- } as Record < string , string > ,
211- buildKitContexts : { } as Record < string , string > ,
212- securityOpts : [ ] ,
213- } ;
208+ buildArgs : {
209+ _DEV_CONTAINERS_BASE_IMAGE : baseName ,
210+ } as Record < string , string > ,
211+ buildKitContexts : { } as Record < string , string > ,
212+ securityOpts : [ ] ,
213+ } ;
214214}
215215
216216function getOmitDevcontainerPropertyOverride ( resolverParams : { omitConfigRemotEnvFromMetadata ?: boolean } ) : ( keyof DevContainerConfig & keyof ImageMetadataEntry ) [ ] {
@@ -241,7 +241,10 @@ async function getFeaturesBuildOptions(params: DockerResolverParameters, devCont
241241 const useBuildKitBuildContexts = buildKitVersionParsed ? ! isEarlierVersion ( buildKitVersionParsed , minRequiredVersion ) : false ;
242242 const buildContentImageName = 'dev_container_feature_content_temp' ;
243243 const disableSELinuxLabels = useBuildKitBuildContexts && await isUsingSELinuxLabels ( params ) ;
244-
244+ // Access Docker engine version
245+ const dockerEngineVersionParsed = params . dockerEngineVersion ?. versionMatch ? parseVersion ( params . dockerEngineVersion . versionMatch ) : undefined ;
246+ const minDockerEngineVersion = [ 23 , 0 , 0 ] ;
247+ const skipDefaultSyntax = dockerEngineVersionParsed ? ! isEarlierVersion ( dockerEngineVersionParsed , minDockerEngineVersion ) : false ;
245248 const omitPropertyOverride = params . common . skipPersistingCustomizationsFromFeatures ? [ 'customizations' ] : [ ] ;
246249 const imageMetadata = getDevcontainerMetadata ( imageBuildInfo . metadata , devContainerConfig , featuresConfig , omitPropertyOverride , getOmitDevcontainerPropertyOverride ( params . common ) ) ;
247250 const { containerUser, remoteUser } = findContainerUsers ( imageMetadata , composeServiceUser , imageBuildInfo . user ) ;
@@ -262,11 +265,12 @@ async function getFeaturesBuildOptions(params: DockerResolverParameters, devCont
262265 . replace ( '#{devcontainerMetadata}' , getDevcontainerMetadataLabel ( imageMetadata ) )
263266 . replace ( '#{containerEnvMetadata}' , generateContainerEnvs ( devContainerConfig . config . containerEnv , true ) )
264267 ;
265- const syntax = imageBuildInfo . dockerfile ?. preamble . directives . syntax ;
266- const omitSyntaxDirective = common . omitSyntaxDirective ; // Can be removed when https://github.com/moby/buildkit/issues/4556 is fixed
267- const dockerfilePrefixContent = `${ omitSyntaxDirective ? '' :
268- useBuildKitBuildContexts && ! ( imageBuildInfo . dockerfile && supportsBuildContexts ( imageBuildInfo . dockerfile ) ) ? '# syntax=docker/dockerfile:1.4' :
269- syntax ? `# syntax=${ syntax } ` : '' }
268+ const syntax = imageBuildInfo . dockerfile ?. preamble . directives . syntax ;
269+ const omitSyntaxDirective = common . omitSyntaxDirective ; // Can be removed when https://github.com/moby/buildkit/issues/4556 is fixed
270+ const dockerfilePrefixContent = `${ omitSyntaxDirective ? '' :
271+ skipDefaultSyntax ? ( syntax ? `# syntax=${ syntax } ` : '' ) :
272+ useBuildKitBuildContexts && ! ( imageBuildInfo . dockerfile && supportsBuildContexts ( imageBuildInfo . dockerfile ) ) ? '# syntax=docker/dockerfile:1.4' :
273+ syntax ? `# syntax=${ syntax } ` : '' }
270274ARG _DEV_CONTAINERS_BASE_IMAGE=placeholder
271275` ;
272276
0 commit comments