diff --git a/lib/src/commonMain/kotlin/org/katan/yoki/YokiConfig.kt b/lib/src/commonMain/kotlin/org/katan/yoki/YokiConfig.kt index fe4c4240..3f0fa3a2 100644 --- a/lib/src/commonMain/kotlin/org/katan/yoki/YokiConfig.kt +++ b/lib/src/commonMain/kotlin/org/katan/yoki/YokiConfig.kt @@ -9,7 +9,7 @@ private const val DOCKER_HOST_ENV_KEY = "DOCKER_HOST" public class YokiConfig { - public var socketPath: String = "" + public var socketPath: String = DEFAULT_DOCKER_UNIX_SOCKET /** * The version of the Docker API that will be used during communication. @@ -27,7 +27,7 @@ public class YokiConfig { * Equivalent to: * ```kotlin * Yoki { - * socketPath = "unix:///var/run/docker.sock" + * socketPath = "unix://var/run/docker.sock" * } * ``` */ diff --git a/lib/src/commonMain/kotlin/org/katan/yoki/io/DefaultSockets.kt b/lib/src/commonMain/kotlin/org/katan/yoki/io/DefaultSockets.kt index 929b4641..bc88805d 100644 --- a/lib/src/commonMain/kotlin/org/katan/yoki/io/DefaultSockets.kt +++ b/lib/src/commonMain/kotlin/org/katan/yoki/io/DefaultSockets.kt @@ -7,5 +7,5 @@ import kotlin.jvm.JvmName internal const val UNIX_SOCKET_PREFIX = "unix://" internal const val HTTP_SOCKET_PREFIX = "tcp://" -public const val DEFAULT_DOCKER_UNIX_SOCKET: String = "$UNIX_SOCKET_PREFIX/var/run/docker.sock" +public const val DEFAULT_DOCKER_UNIX_SOCKET: String = "${UNIX_SOCKET_PREFIX}/var/run/docker.sock" public const val DEFAULT_DOCKER_HTTP_SOCKET: String = "${HTTP_SOCKET_PREFIX}localhost:2375" diff --git a/lib/src/commonMain/kotlin/org/katan/yoki/resource/container/ContainerResource.kt b/lib/src/commonMain/kotlin/org/katan/yoki/resource/container/ContainerResource.kt index 446f1775..5762af24 100644 --- a/lib/src/commonMain/kotlin/org/katan/yoki/resource/container/ContainerResource.kt +++ b/lib/src/commonMain/kotlin/org/katan/yoki/resource/container/ContainerResource.kt @@ -56,7 +56,7 @@ public class ContainerResource internal constructor( parameter("all", options.all) parameter("limit", options.limit) parameter("size", options.size) - parameter("filters", json.encodeToString(raw)) + parameter("filters", options.filters?.let(json::encodeToString)) }.body() } diff --git a/lib/src/jvmMain/kotlin/org/katan/yoki/io/SocketDns.kt b/lib/src/jvmMain/kotlin/org/katan/yoki/io/SocketDns.kt index a9cf8489..8582256a 100644 --- a/lib/src/jvmMain/kotlin/org/katan/yoki/io/SocketDns.kt +++ b/lib/src/jvmMain/kotlin/org/katan/yoki/io/SocketDns.kt @@ -3,10 +3,12 @@ package org.katan.yoki.io import okhttp3.Dns import java.net.InetAddress -internal class SocketDns : Dns { +internal class SocketDns( + val isUnixSocket: Boolean, +) : Dns { override fun lookup(hostname: String): List { - return if (hostname.endsWith(".socket")) listOf( + return if (isUnixSocket) listOf( InetAddress.getByAddress( hostname, byteArrayOf(0, 0, 0, 0) diff --git a/lib/src/jvmMain/kotlin/org/katan/yoki/io/configureHttpClient.kt b/lib/src/jvmMain/kotlin/org/katan/yoki/io/configureHttpClient.kt index 873fd8f2..18e7ae5c 100644 --- a/lib/src/jvmMain/kotlin/org/katan/yoki/io/configureHttpClient.kt +++ b/lib/src/jvmMain/kotlin/org/katan/yoki/io/configureHttpClient.kt @@ -11,6 +11,7 @@ import io.ktor.http.Url import io.ktor.http.contentType import io.ktor.http.encodedPath import io.ktor.http.takeFrom +import okio.ByteString.Companion.encodeUtf8 import org.katan.yoki.Yoki import java.util.concurrent.TimeUnit @@ -23,9 +24,11 @@ internal actual fun HttpClientConfig.configu require(this is OkHttpConfig) { "Only OkHttp engine is supported for now" } config { - if (isUnixSocket(client.config.socketPath)) + val isUnixSocket = isUnixSocket(client.config.socketPath) + if (isUnixSocket) { socketFactory(UnixSocketFactory()) - dns(SocketDns()) + } + dns(SocketDns(isUnixSocket)) readTimeout(0, TimeUnit.MILLISECONDS) connectTimeout(0, TimeUnit.MILLISECONDS) callTimeout(0, TimeUnit.MILLISECONDS) @@ -54,13 +57,14 @@ private fun isUnixSocket(input: String): Boolean { } private fun createUrlBuilder(socketPath: String): URLBuilder { - val url = Url(socketPath) return if (isUnixSocket(socketPath)) { URLBuilder( protocol = URLProtocol.HTTP, - host = "docker.socket" + port = 2375, + host = socketPath.substringAfter(UNIX_SOCKET_PREFIX).encodeUtf8().hex() + ".socket" ) } else { + val url = Url(socketPath) URLBuilder( protocol = URLProtocol.HTTP, host = url.host,