Skip to content

Commit e6de165

Browse files
committed
Fix #26484: Docker Swarm: support private registries
1 parent b92a025 commit e6de165

3 files changed

Lines changed: 61 additions & 2 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/backend/docker/DockerSwarmBackend.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.spotify.docker.client.DockerClient;
2424
import com.spotify.docker.client.exceptions.DockerException;
25+
import com.spotify.docker.client.messages.RegistryAuth;
2526
import com.spotify.docker.client.messages.mount.Mount;
2627
import com.spotify.docker.client.messages.swarm.DnsConfig;
2728
import com.spotify.docker.client.messages.swarm.EndpointSpec;
@@ -135,7 +136,21 @@ protected Container startContainer(ContainerSpec spec, Proxy proxy) throws Excep
135136
serviceSpecBuilder.endpointSpec(EndpointSpec.builder().ports(portsToPublish).build());
136137
}
137138

138-
String serviceId = dockerClient.createService(serviceSpecBuilder.build()).id();
139+
String serviceId;
140+
if (spec.getDockerSwarmRegistryDomain() != null
141+
&& spec.getDockerSwarmRegistryUsername() != null
142+
&& spec.getDockerSwarmRegistryPassword() != null) {
143+
144+
RegistryAuth registryAuth = RegistryAuth.builder()
145+
.serverAddress(spec.getDockerSwarmRegistryDomain())
146+
.username(spec.getDockerSwarmRegistryUsername())
147+
.password(spec.getDockerSwarmRegistryPassword())
148+
.build();
149+
serviceId = dockerClient.createService(serviceSpecBuilder.build(), registryAuth).id();
150+
} else {
151+
serviceId = dockerClient.createService(serviceSpecBuilder.build()).id();
152+
}
153+
139154
container.getParameters().put(PARAM_SERVICE_ID, serviceId);
140155

141156
// Give the service some time to start up and launch a container.

src/main/java/eu/openanalytics/containerproxy/model/spec/ContainerSpec.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ public class ContainerSpec {
4646
private Map<String, String> labels = new HashMap<>();
4747
private Map<String, String> settings = new HashMap<>();
4848
private List<DockerSwarmSecret> dockerSwarmSecrets = new ArrayList();
49+
private String dockerSwarmRegistryDomain;
50+
private String dockerSwarmRegistryUsername;
51+
private String dockerSwarmRegistryPassword;
4952

5053
public String getImage() {
5154
return image;
@@ -164,6 +167,30 @@ public void setDockerSwarmSecrets(List<DockerSwarmSecret> dockerSwarmSecrets) {
164167
this.dockerSwarmSecrets = dockerSwarmSecrets;
165168
}
166169

170+
public String getDockerSwarmRegistryDomain() {
171+
return dockerSwarmRegistryDomain;
172+
}
173+
174+
public void setDockerSwarmRegistryDomain(String dockerSwarmRegistryDomain) {
175+
this.dockerSwarmRegistryDomain = dockerSwarmRegistryDomain;
176+
}
177+
178+
public String getDockerSwarmRegistryUsername() {
179+
return dockerSwarmRegistryUsername;
180+
}
181+
182+
public void setDockerSwarmRegistryUsername(String dockerSwarmRegistryUsername) {
183+
this.dockerSwarmRegistryUsername = dockerSwarmRegistryUsername;
184+
}
185+
186+
public String getDockerSwarmRegistryPassword() {
187+
return dockerSwarmRegistryPassword;
188+
}
189+
190+
public void setDockerSwarmRegistryPassword(String dockerSwarmRegistryPassword) {
191+
this.dockerSwarmRegistryPassword = dockerSwarmRegistryPassword;
192+
}
193+
167194
public void copy(ContainerSpec target) {
168195
target.setImage(image);
169196
if (cmd != null) target.setCmd(Arrays.copyOf(cmd, cmd.length));
@@ -197,7 +224,9 @@ public void copy(ContainerSpec target) {
197224
if (target.getDockerSwarmSecrets() == null) target.setDockerSwarmSecrets(new ArrayList<>());
198225
target.getDockerSwarmSecrets().addAll(dockerSwarmSecrets);
199226
}
227+
target.setDockerSwarmRegistryDomain(dockerSwarmRegistryDomain);
228+
target.setDockerSwarmRegistryUsername(dockerSwarmRegistryUsername);
229+
target.setDockerSwarmRegistryPassword(dockerSwarmRegistryPassword);
200230
target.setTargetPath(targetPath);
201231
}
202-
203232
}

src/main/java/eu/openanalytics/containerproxy/spec/expression/ExpressionAwareContainerSpec.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,21 @@ public List<DockerSwarmSecret> getDockerSwarmSecrets() {
128128
).collect(Collectors.toList());
129129
}
130130

131+
@Override
132+
public String getDockerSwarmRegistryDomain() {
133+
return source.getDockerSwarmRegistryDomain();
134+
}
135+
136+
@Override
137+
public String getDockerSwarmRegistryUsername() {
138+
return source.getDockerSwarmRegistryUsername();
139+
}
140+
141+
@Override
142+
public String getDockerSwarmRegistryPassword() {
143+
return source.getDockerSwarmRegistryPassword();
144+
}
145+
131146
@Override
132147
public Map<String, String> getLabels() {
133148
if (source.getLabels() == null) return null;

0 commit comments

Comments
 (0)