Skip to content

Commit a5be86d

Browse files
committed
Support platform option in image build/create/pull commands
1 parent 9c81e41 commit a5be86d

12 files changed

Lines changed: 94 additions & 2 deletions

src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,14 @@ public interface BuildImageCmd extends AsyncDockerCmd<BuildImageCmd, BuildRespon
131131
@CheckForNull
132132
String getNetworkMode();
133133

134+
/**
135+
* "platform" in API
136+
*
137+
* @since {@link RemoteApiVersion#VERSION_1_32}
138+
*/
139+
@CheckForNull
140+
String getPlatform();
141+
134142
// setters
135143

136144
/**
@@ -199,6 +207,11 @@ public interface BuildImageCmd extends AsyncDockerCmd<BuildImageCmd, BuildRespon
199207
*/
200208
BuildImageCmd withNetworkMode(String networkMode);
201209

210+
/**
211+
*@since {@link RemoteApiVersion#VERSION_1_32}
212+
*/
213+
BuildImageCmd withPlatform(String platform);
214+
202215
interface Exec extends DockerCmdAsyncExec<BuildImageCmd, BuildResponseItem> {
203216
}
204217

src/main/java/com/github/dockerjava/api/command/CreateImageCmd.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ public interface CreateImageCmd extends SyncDockerCmd<CreateImageResponse> {
1313
@CheckForNull
1414
String getTag();
1515

16+
@CheckForNull
17+
String getPlatform();
18+
1619
@CheckForNull
1720
InputStream getImageStream();
1821

@@ -35,6 +38,12 @@ public interface CreateImageCmd extends SyncDockerCmd<CreateImageResponse> {
3538
*/
3639
CreateImageCmd withTag(String tag);
3740

41+
/**
42+
* @param platform
43+
* the platform for this image
44+
*/
45+
CreateImageCmd withPlatform(String platform);
46+
3847
interface Exec extends DockerCmdSyncExec<CreateImageCmd, CreateImageResponse> {
3948
}
4049

src/main/java/com/github/dockerjava/api/command/PullImageCmd.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ public interface PullImageCmd extends AsyncDockerCmd<PullImageCmd, PullResponseI
1919
@CheckForNull
2020
String getTag();
2121

22+
@CheckForNull
23+
String getPlatform();
24+
2225
@CheckForNull
2326
String getRegistry();
2427

@@ -29,6 +32,11 @@ public interface PullImageCmd extends AsyncDockerCmd<PullImageCmd, PullResponseI
2932

3033
PullImageCmd withTag(String tag);
3134

35+
/**
36+
* @since {@link com.github.dockerjava.core.RemoteApiVersion#VERSION_1_32}
37+
*/
38+
PullImageCmd withPlatform(String tag);
39+
3240
PullImageCmd withRegistry(String registry);
3341

3442
PullImageCmd withAuthConfig(AuthConfig authConfig);

src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ public class BuildImageCmdImpl extends AbstrAsyncDockerCmd<BuildImageCmd, BuildR
6868

6969
private String networkMode;
7070

71+
private String platform;
72+
7173
public BuildImageCmdImpl(BuildImageCmd.Exec exec) {
7274
super(exec);
7375
}
@@ -184,6 +186,11 @@ public String getNetworkMode() {
184186
return networkMode;
185187
}
186188

189+
@Override
190+
public String getPlatform() {
191+
return platform;
192+
}
193+
187194
// getter lib specific
188195

189196
@Override
@@ -376,6 +383,12 @@ public BuildImageCmd withNetworkMode(String networkMode) {
376383
return this;
377384
}
378385

386+
@Override
387+
public BuildImageCmd withPlatform(String platform) {
388+
this.platform = platform;
389+
return this;
390+
}
391+
379392
@Override
380393
public void close() {
381394
super.close();

src/main/java/com/github/dockerjava/core/command/CreateImageCmdImpl.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
*/
1313
public class CreateImageCmdImpl extends AbstrDockerCmd<CreateImageCmd, CreateImageResponse> implements CreateImageCmd {
1414

15-
private String repository, tag;
15+
private String repository, tag, platform;
1616

1717
private InputStream imageStream;
1818

@@ -38,6 +38,11 @@ public String getTag() {
3838
return tag;
3939
}
4040

41+
@Override
42+
public String getPlatform() {
43+
return platform;
44+
}
45+
4146
@Override
4247
public InputStream getImageStream() {
4348
return imageStream;
@@ -75,4 +80,13 @@ public CreateImageCmdImpl withTag(String tag) {
7580
this.tag = tag;
7681
return this;
7782
}
83+
84+
/**
85+
* {@inheritDoc}
86+
*/
87+
@Override
88+
public CreateImageCmd withPlatform(String platform) {
89+
this.platform = platform;
90+
return this;
91+
}
7892
}

src/main/java/com/github/dockerjava/core/command/PullImageCmdImpl.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
*/
1414
public class PullImageCmdImpl extends AbstrAsyncDockerCmd<PullImageCmd, PullResponseItem> implements PullImageCmd {
1515

16-
private String repository, tag, registry;
16+
private String repository, tag, platform, registry;
1717

1818
private AuthConfig authConfig;
1919

@@ -42,6 +42,11 @@ public String getTag() {
4242
return tag;
4343
}
4444

45+
@Override
46+
public String getPlatform() {
47+
return platform;
48+
}
49+
4550
@Override
4651
public String getRegistry() {
4752
return registry;
@@ -61,6 +66,12 @@ public PullImageCmd withTag(String tag) {
6166
return this;
6267
}
6368

69+
@Override
70+
public PullImageCmd withPlatform(String platform) {
71+
this.platform = platform;
72+
return this;
73+
}
74+
6475
@Override
6576
public PullImageCmd withRegistry(String registry) {
6677
checkNotNull(registry, "registry was not specified");

src/main/java/com/github/dockerjava/core/exec/BuildImageCmdExec.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ protected Void execute0(BuildImageCmd command, ResultCallback<BuildResponseItem>
106106
webTarget = webTarget.queryParam("networkmode", command.getNetworkMode());
107107
}
108108

109+
if (command.getPlatform() != null) {
110+
webTarget = webTarget.queryParam("platform", command.getPlatform());
111+
}
112+
109113
LOGGER.trace("POST: {}", webTarget);
110114

111115
InvocationBuilder builder = resourceWithOptionalAuthConfig(command, webTarget.request())

src/main/java/com/github/dockerjava/core/exec/CreateImageCmdExec.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ protected CreateImageResponse execute(CreateImageCmd command) {
2424
WebTarget webResource = getBaseResource().path("/images/create").queryParam("repo", command.getRepository())
2525
.queryParam("tag", command.getTag()).queryParam("fromSrc", "-");
2626

27+
if (command.getPlatform() != null) {
28+
webResource = webResource.queryParam("platform", command.getPlatform());
29+
}
30+
2731
LOGGER.trace("POST: {}", webResource);
2832
return webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM)
2933
.post(new TypeReference<CreateImageResponse>() {

src/main/java/com/github/dockerjava/core/exec/PullImageCmdExec.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ protected Void execute0(PullImageCmd command, ResultCallback<PullResponseItem> r
2525
WebTarget webResource = getBaseResource().path("/images/create").queryParam("tag", command.getTag())
2626
.queryParam("fromImage", command.getRepository()).queryParam("registry", command.getRegistry());
2727

28+
if (command.getPlatform() != null) {
29+
webResource = webResource.queryParam("platform", command.getPlatform());
30+
}
31+
2832
LOGGER.trace("POST: {}", webResource);
2933
resourceWithOptionalAuthConfig(command.getAuthConfig(), webResource.request()).accept(MediaType.APPLICATION_OCTET_STREAM).post(
3034
null, new TypeReference<PullResponseItem>() {

src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ protected AbstractCallbackNotifier<BuildResponseItem> callbackNotifier(BuildImag
125125
webTarget = webTarget.queryParam("networkmode", command.getNetworkMode());
126126
}
127127

128+
if (command.getPlatform() != null) {
129+
webTarget = webTarget.queryParam("platform", command.getPlatform());
130+
}
131+
128132
webTarget.property(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.CHUNKED);
129133
webTarget.property(ClientProperties.CHUNKED_ENCODING_SIZE, 1024 * 1024);
130134

0 commit comments

Comments
 (0)