Skip to content

Commit a322981

Browse files
committed
Explictly set platform flag to prevent mismatches and errors for docker commands
1 parent 707221b commit a322981

2 files changed

Lines changed: 10 additions & 2 deletions

File tree

src/spec-node/singleContainer.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66

7-
import { createContainerProperties, startEventSeen, ResolverResult, getTunnelInformation, getDockerfilePath, getDockerContextPath, DockerResolverParameters, isDockerFileConfig, uriToWSLFsPath, WorkspaceConfiguration, getFolderImageName, inspectDockerImage, logUMask, SubstitutedConfig, checkDockerSupportForGPU, isBuildKitImagePolicyError, isBuildxCacheToInline } from './utils';
7+
import { createContainerProperties, startEventSeen, ResolverResult, getTunnelInformation, getDockerfilePath, getDockerContextPath, DockerResolverParameters, isDockerFileConfig, uriToWSLFsPath, WorkspaceConfiguration, getFolderImageName, inspectDockerImage, logUMask, SubstitutedConfig, checkDockerSupportForGPU, isBuildKitImagePolicyError, isBuildxCacheToInline, toPlatformString } from './utils';
88
import { ContainerProperties, setupInContainer, ResolverProgress, ResolverParameters } from '../spec-common/injectHeadless';
99
import { ContainerError, toErrorText } from '../spec-common/errors';
1010
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
405405
cmd.push(...details.Config.Cmd || []);
406406
}
407407

408+
const platformArgs = ['--platform', toPlatformString(params.platformInfo)];
408409
const args = [
409410
'run',
410411
'--sig-proxy=false',
411412
'-a', 'STDOUT',
412413
'-a', 'STDERR',
414+
...platformArgs,
413415
...exposed,
414416
...cwdMount,
415417
...additionalMount,

src/spec-node/utils.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,11 @@ export function isBuildKitImagePolicyError(err: any): boolean {
240240
|| (errStderr && typeof errStderr === 'string' && (errStderr.includes(imagePolicyErrorString) || errStderr.includes(sourceDeniedString)));
241241
}
242242

243+
export function toPlatformString(platformInfo: PlatformInfo): string {
244+
const base = `${platformInfo.os}/${platformInfo.arch}`;
245+
return platformInfo.variant ? `${base}/${platformInfo.variant}` : base;
246+
}
247+
243248
export async function inspectDockerImage(params: DockerResolverParameters | DockerCLIParameters, imageName: string, pullImageOnError: boolean) {
244249
try {
245250
return await inspectImage(params, imageName);
@@ -254,7 +259,8 @@ export async function inspectDockerImage(params: DockerResolverParameters | Dock
254259
output.write(`Error fetching image details: ${err2?.message}`);
255260
}
256261
try {
257-
await retry(async () => dockerPtyCLI(params, 'pull', imageName), { maxRetries: 5, retryIntervalMilliseconds: 1000, output });
262+
const platformString = toPlatformString(params.platformInfo);
263+
await retry(async () => dockerPtyCLI(params, 'pull', '--platform', platformString, imageName), { maxRetries: 5, retryIntervalMilliseconds: 1000, output });
258264
} catch (_err) {
259265
if (err.stdout) {
260266
output.write(err.stdout.toString());

0 commit comments

Comments
 (0)