@@ -68,6 +68,10 @@ public class DockerApi {
6868
6969 static final ApiVersion PLATFORM_API_VERSION = ApiVersion .of (1 , 41 );
7070
71+ static final ApiVersion INSPECT_PLATFORM_API_VERSION = ApiVersion .of (1 , 49 );
72+
73+ static final ApiVersion EXPORT_PLATFORM_API_VERSION = ApiVersion .of (1 , 51 );
74+
7175 static final ApiVersion UNKNOWN_API_VERSION = ApiVersion .of (0 , 0 );
7276
7377 static final String API_VERSION_HEADER_NAME = "API-Version" ;
@@ -239,9 +243,12 @@ public Image pull(ImageReference reference, @Nullable ImagePlatform platform,
239243 listener .onUpdate (event );
240244 });
241245 }
242- String digest = digestCapture .getDigest ();
243- ImageReference inspectReference = (digest != null ) ? reference .withDigest (digest ) : reference ;
244- return inspect ((platform != null ) ? PLATFORM_API_VERSION : API_VERSION , inspectReference );
246+ ApiVersion callVersion = API_VERSION ;
247+ if (platform != null ) {
248+ callVersion = (getApiVersion ().supports (INSPECT_PLATFORM_API_VERSION ))
249+ ? INSPECT_PLATFORM_API_VERSION : PLATFORM_API_VERSION ;
250+ }
251+ return inspect (callVersion , reference , platform );
245252 }
246253 finally {
247254 listener .onFinish ();
@@ -328,9 +335,20 @@ public void exportLayers(ImageReference reference, @Nullable ImagePlatform platf
328335 IOBiConsumer <String , TarArchive > exports ) throws IOException {
329336 Assert .notNull (reference , "'reference' must not be null" );
330337 Assert .notNull (exports , "'exports' must not be null" );
331- URI uri = (platform != null )
332- ? buildUrl (PLATFORM_API_VERSION , "/images/" + reference + "/get" , "platform" , platform )
333- : buildUrl ("/images/" + reference + "/get" );
338+ URI uri ;
339+ if (platform != null ) {
340+ if (getApiVersion ().supports (EXPORT_PLATFORM_API_VERSION )) {
341+ uri = buildUrl (EXPORT_PLATFORM_API_VERSION , "/images/" + reference + "/get" , "platform" ,
342+ platform .toString ());
343+ }
344+ else {
345+ // Platform selection for /images/{ref}/get is supported from 1.51
346+ uri = buildUrl ("/images/" + reference + "/get" );
347+ }
348+ }
349+ else {
350+ uri = buildUrl ("/images/" + reference + "/get" );
351+ }
334352 try (Response response = http ().get (uri )) {
335353 try (ExportedImageTar exportedImageTar = new ExportedImageTar (reference , response .getContent ())) {
336354 exportedImageTar .exportLayers (exports );
@@ -362,8 +380,15 @@ public Image inspect(ImageReference reference) throws IOException {
362380 }
363381
364382 private Image inspect (ApiVersion apiVersion , ImageReference reference ) throws IOException {
383+ return inspect (apiVersion , reference , null );
384+ }
385+
386+ private Image inspect (ApiVersion apiVersion , ImageReference reference , @ Nullable ImagePlatform platform )
387+ throws IOException {
365388 Assert .notNull (reference , "'reference' must not be null" );
366- URI imageUri = buildUrl (apiVersion , "/images/" + reference + "/json" );
389+ URI imageUri = (platform != null )
390+ ? buildUrl (apiVersion , "/images/" + reference + "/json" , "platform" , platform .toQueryParameter (getApiVersion ()))
391+ : buildUrl (apiVersion , "/images/" + reference + "/json" );
367392 try (Response response = http ().get (imageUri )) {
368393 return Image .of (response .getContent ());
369394 }
0 commit comments