de.gesellix.docker-client
#!/usr/bin/env groovy
@Grapes(
[
@Grab(group='de.gesellix', module='docker-client', version='2025-01-19T00-00-00'),
@Grab(group='commons-io', module='commons-io', version='2.18.0'),
]
)
import de.gesellix.docker.remote.api.BuildInfo
import de.gesellix.docker.remote.api.core.StreamCallback
import org.apache.commons.io.IOUtils
import de.gesellix.docker.client.DockerClientImpl
import java.nio.charset.StandardCharsets
void buildTestContainer() {
def dockerBuildStr = """FROM ubuntu:25.04\n
RUN env DEBIAN_FRONTEND=noninteractive apt update && apt install -y curl python3-pyqt6 libmpv-dev python3-pycodestyle xvfb
RUN curl -LsSf https://astral.sh/uv/install.sh | env XDG_BIN_HOME=/bin sh
""".stripIndent()
def buildFileStream = IOUtils.toInputStream(dockerBuildStr, StandardCharsets.UTF_8);
dockerClient = new DockerClientImpl()
println(dockerClient.images())
println(dockerClient.ping().content)
dockerClient.build(new StreamCallback<BuildInfo>() {
@Override
void onNext(BuildInfo buildInfo) {
println(buildInfo)
}
},
java.time.Duration.ofDays(1),
buildFileStream
)
}
buildTestContainer()
使用此API构建容器的正确方法是什么?
该库直接映射到Docker Engine API,并且API需要一个焦油文件,其中包含需要构建的内容的内容。我能够使用以下内容在内存中构建焦油文件,其中包含一个dockerfile(必须先将其写入临时文件)并构建了docker image。...(a bunch of image names, omitted)...
OK
Caught: {"message":"unexpected EOF"}
{"message":"unexpected EOF"}
at de.gesellix.docker.remote.api.client.ImageApi.imageBuild(ImageApi.kt:277)
at de.gesellix.docker.remote.api.client.ImageApi$imageBuild$0.call(Unknown Source)