From a322981b2a76edf480bb76907768067bd58c0170 Mon Sep 17 00:00:00 2001 From: Abdurrahmaan Iqbal Date: Wed, 11 Feb 2026 18:02:47 +0000 Subject: [PATCH] Explictly set platform flag to prevent mismatches and errors for docker commands --- src/spec-node/singleContainer.ts | 4 +++- src/spec-node/utils.ts | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/spec-node/singleContainer.ts b/src/spec-node/singleContainer.ts index dc38ef1fc..70ffdd40c 100644 --- a/src/spec-node/singleContainer.ts +++ b/src/spec-node/singleContainer.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { createContainerProperties, startEventSeen, ResolverResult, getTunnelInformation, getDockerfilePath, getDockerContextPath, DockerResolverParameters, isDockerFileConfig, uriToWSLFsPath, WorkspaceConfiguration, getFolderImageName, inspectDockerImage, logUMask, SubstitutedConfig, checkDockerSupportForGPU, isBuildKitImagePolicyError, isBuildxCacheToInline } from './utils'; +import { createContainerProperties, startEventSeen, ResolverResult, getTunnelInformation, getDockerfilePath, getDockerContextPath, DockerResolverParameters, isDockerFileConfig, uriToWSLFsPath, WorkspaceConfiguration, getFolderImageName, inspectDockerImage, logUMask, SubstitutedConfig, checkDockerSupportForGPU, isBuildKitImagePolicyError, isBuildxCacheToInline, toPlatformString } from './utils'; import { ContainerProperties, setupInContainer, ResolverProgress, ResolverParameters } from '../spec-common/injectHeadless'; import { ContainerError, toErrorText } from '../spec-common/errors'; import { ContainerDetails, listContainers, DockerCLIParameters, inspectContainers, dockerCLI, dockerPtyCLI, toPtyExecParameters, ImageDetails, toExecParameters, removeContainer } from '../spec-shutdown/dockerUtils'; @@ -405,11 +405,13 @@ while sleep 1 & wait $!; do :; done`, '-']; // `wait $!` allows for the `trap` t cmd.push(...details.Config.Cmd || []); } + const platformArgs = ['--platform', toPlatformString(params.platformInfo)]; const args = [ 'run', '--sig-proxy=false', '-a', 'STDOUT', '-a', 'STDERR', + ...platformArgs, ...exposed, ...cwdMount, ...additionalMount, diff --git a/src/spec-node/utils.ts b/src/spec-node/utils.ts index 5c0fb374c..3cb32ca90 100644 --- a/src/spec-node/utils.ts +++ b/src/spec-node/utils.ts @@ -240,6 +240,11 @@ export function isBuildKitImagePolicyError(err: any): boolean { || (errStderr && typeof errStderr === 'string' && (errStderr.includes(imagePolicyErrorString) || errStderr.includes(sourceDeniedString))); } +export function toPlatformString(platformInfo: PlatformInfo): string { + const base = `${platformInfo.os}/${platformInfo.arch}`; + return platformInfo.variant ? `${base}/${platformInfo.variant}` : base; +} + export async function inspectDockerImage(params: DockerResolverParameters | DockerCLIParameters, imageName: string, pullImageOnError: boolean) { try { return await inspectImage(params, imageName); @@ -254,7 +259,8 @@ export async function inspectDockerImage(params: DockerResolverParameters | Dock output.write(`Error fetching image details: ${err2?.message}`); } try { - await retry(async () => dockerPtyCLI(params, 'pull', imageName), { maxRetries: 5, retryIntervalMilliseconds: 1000, output }); + const platformString = toPlatformString(params.platformInfo); + await retry(async () => dockerPtyCLI(params, 'pull', '--platform', platformString, imageName), { maxRetries: 5, retryIntervalMilliseconds: 1000, output }); } catch (_err) { if (err.stdout) { output.write(err.stdout.toString());