Skip to content

Commit f41bdb2

Browse files
bsideupkivieweddumelendez
authored
Read indexServerAddress from Docker's /info (#5347)
* Read `indexServerAddress` from Docker's `/info` * remove `setIndexServerAddress` * Update fallback default registry name to `https://index.docker.io/v1/` * Fix build Co-authored-by: Kevin Wittek <[email protected]> Co-authored-by: Eddú Meléndez Gonzales <[email protected]>
1 parent 7d54ff9 commit f41bdb2

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

core/src/main/java/org/testcontainers/DockerClientFactory.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ public void close() {
199199
};
200200
log.info("Docker host IP address is {}", strategy.getDockerHostIpAddress());
201201

202-
Info dockerInfo = client.infoCmd().exec();
202+
Info dockerInfo = strategy.getInfo();
203203
Version version = client.versionCmd().exec();
204204
activeApiVersion = version.getApiVersion();
205205
activeExecutionDriver = dockerInfo.getExecutionDriver();
@@ -434,4 +434,9 @@ public String getActiveExecutionDriver() {
434434
public boolean isUsing(Class<? extends DockerClientProviderStrategy> providerStrategyClass) {
435435
return strategy != null && providerStrategyClass.isAssignableFrom(this.strategy.getClass());
436436
}
437+
438+
@UnstableAPI
439+
public Info getInfo() {
440+
return getOrInitializeStrategy().getInfo();
441+
}
437442
}

core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ public abstract class DockerClientProviderStrategy {
6565

6666
private String dockerHostIpAddress;
6767

68+
@Getter
69+
private Info info;
70+
6871
private final RateLimiter PING_RATE_LIMITER = RateLimiterBuilder.newBuilder()
6972
.withRate(10, TimeUnit.SECONDS)
7073
.withConstantThroughput()
@@ -249,7 +252,7 @@ private static boolean tryOutStrategy(List<String> configurationFailures, Docker
249252
return false;
250253
}
251254

252-
Info info = strategy.getDockerClient().infoCmd().exec();
255+
strategy.info = strategy.getDockerClient().infoCmd().exec();
253256
log.info("Found Docker environment with {}", strategy.getDescription());
254257
log.debug(
255258
"Transport type: '{}', Docker host: '{}'",
@@ -258,7 +261,7 @@ private static boolean tryOutStrategy(List<String> configurationFailures, Docker
258261
);
259262

260263
log.debug("Checking Docker OS type for {}", strategy.getDescription());
261-
String osType = info.getOsType();
264+
String osType = strategy.getInfo().getOsType();
262265
if (StringUtils.isBlank(osType)) {
263266
log.warn("Could not determine Docker OS type");
264267
} else if (!osType.equals("linux")) {

core/src/main/java/org/testcontainers/utility/RegistryAuthLocator.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.apache.commons.lang3.StringUtils;
88
import org.apache.commons.lang3.SystemUtils;
99
import org.slf4j.Logger;
10+
import org.testcontainers.DockerClientFactory;
1011
import org.zeroturnaround.exec.InvalidResultException;
1112
import org.zeroturnaround.exec.ProcessExecutor;
1213

@@ -32,7 +33,7 @@
3233
public class RegistryAuthLocator {
3334

3435
private static final Logger log = getLogger(RegistryAuthLocator.class);
35-
private static final String DEFAULT_REGISTRY_NAME = "index.docker.io";
36+
private static final String DEFAULT_REGISTRY_NAME = "https://index.docker.io/v1/";
3637
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
3738

3839
private static RegistryAuthLocator instance;
@@ -282,7 +283,14 @@ private String getCredentialProgramName(String credHelper) {
282283
}
283284

284285
private String effectiveRegistryName(DockerImageName dockerImageName) {
285-
return StringUtils.defaultIfEmpty(dockerImageName.getRegistry(), DEFAULT_REGISTRY_NAME);
286+
final String registry = dockerImageName.getRegistry();
287+
if (!StringUtils.isEmpty(registry)) {
288+
return registry;
289+
}
290+
return StringUtils.defaultString(
291+
DockerClientFactory.instance().getInfo().getIndexServerAddress(),
292+
DEFAULT_REGISTRY_NAME
293+
);
286294
}
287295

288296
private String getGenericCredentialsNotFoundMsg(String credentialHelperName) {

0 commit comments

Comments
 (0)