Home / Class/ ResolvedDockerHost Class — spring-boot Architecture

ResolvedDockerHost Class — spring-boot Architecture

Architecture documentation for the ResolvedDockerHost class in ResolvedDockerHost.java from the spring-boot codebase.

Entity Profile

Relationship Graph

Source Code

buildpack/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/configuration/ResolvedDockerHost.java lines 34–128

public class ResolvedDockerHost extends DockerHost {

	private static final String UNIX_SOCKET_PREFIX = "unix://";

	private static final String DOMAIN_SOCKET_PATH = "/var/run/docker.sock";

	private static final String WINDOWS_NAMED_PIPE_PATH = "//./pipe/docker_engine";

	private static final String DOCKER_HOST = "DOCKER_HOST";

	private static final String DOCKER_TLS_VERIFY = "DOCKER_TLS_VERIFY";

	private static final String DOCKER_CERT_PATH = "DOCKER_CERT_PATH";

	private static final String DOCKER_CONTEXT = "DOCKER_CONTEXT";

	ResolvedDockerHost(@Nullable String address) {
		super(address);
	}

	ResolvedDockerHost(@Nullable String address, boolean secure, @Nullable String certificatePath) {
		super(address, secure, certificatePath);
	}

	@Override
	public String getAddress() {
		String address = super.getAddress();
		if (address == null) {
			address = getDefaultAddress();
		}
		return address.startsWith(UNIX_SOCKET_PREFIX) ? address.substring(UNIX_SOCKET_PREFIX.length()) : address;
	}

	public boolean isRemote() {
		return getAddress().startsWith("http") || getAddress().startsWith("tcp");
	}

	public boolean isLocalFileReference() {
		try {
			return Files.exists(Paths.get(getAddress()));
		}
		catch (Exception ex) {
			return false;
		}
	}

	/**
	 * Create a new {@link ResolvedDockerHost} from the given host configuration.
	 * @param connectionConfiguration the host configuration or {@code null}
	 * @return the resolved docker host
	 */
	public static ResolvedDockerHost from(@Nullable DockerConnectionConfiguration connectionConfiguration) {
		return from(Environment.SYSTEM, connectionConfiguration);
	}

	static ResolvedDockerHost from(Environment environment,
			@Nullable DockerConnectionConfiguration connectionConfiguration) {
		DockerConfigurationMetadata environmentConfiguration = DockerConfigurationMetadata.from(environment);
		if (environment.get(DOCKER_CONTEXT) != null) {
			DockerContext context = environmentConfiguration.forContext(environment.get(DOCKER_CONTEXT));
			return new ResolvedDockerHost(context.getDockerHost(), context.isTlsVerify(), context.getTlsPath());
		}
		if (connectionConfiguration instanceof DockerConnectionConfiguration.Context contextConfiguration) {
			DockerContext context = environmentConfiguration.forContext(contextConfiguration.context());
			return new ResolvedDockerHost(context.getDockerHost(), context.isTlsVerify(), context.getTlsPath());
		}
		if (environment.get(DOCKER_HOST) != null) {
			return new ResolvedDockerHost(environment.get(DOCKER_HOST), isTrue(environment.get(DOCKER_TLS_VERIFY)),
					environment.get(DOCKER_CERT_PATH));
		}
		if (connectionConfiguration instanceof DockerConnectionConfiguration.Host addressConfiguration) {
			return new ResolvedDockerHost(addressConfiguration.address(), addressConfiguration.secure(),
					addressConfiguration.certificatePath());
		}
		if (environmentConfiguration.getContext().getDockerHost() != null) {
			DockerContext context = environmentConfiguration.getContext();
			return new ResolvedDockerHost(context.getDockerHost(), context.isTlsVerify(), context.getTlsPath());
		}
		return new ResolvedDockerHost(getDefaultAddress());
	}

	private static String getDefaultAddress() {
		return Platform.isWindows() ? WINDOWS_NAMED_PIPE_PATH : DOMAIN_SOCKET_PATH;
	}

	private static boolean isTrue(@Nullable String value) {
		try {
			return (value != null) && (Integer.parseInt(value) == 1);
		}
		catch (NumberFormatException ex) {
			return false;
		}
	}

}

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free