有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法从Dockerfile构建docker映像

您好,我正在尝试从Docker文件构建Docker映像,并出现以下错误:

java.lang.IllegalStateException: Could not acquire image ID or digest following build at com.google.common.base.Preconditions.checkState(Preconditions.java:444) ~[guava-21.0.jar:na] at com.spotify.docker.client.DefaultDockerClient$BuildProgressHandler.getImageId(DefaultDockerClient.java:298) ~[docker-client-8.11.7.jar:8.11.7] at com.spotify.docker.client.DefaultDockerClient$BuildProgressHandler.access$1200(DefaultDockerClient.java:287) ~[docker-client-8.11.7.jar:8.11.7] at com.spotify.docker.client.DefaultDockerClient.build(DefaultDockerClient.java:1481) ~[docker-client-8.11.7.jar:8.11.7]

我可以从命令行构建完全相同的Dockerfile,但我无法调试它,因为堆栈跟踪信息不多。以下是一些可能相关的信息:

Docker版本:

客户: 版本:17.03.2-ce API版本:1.27 服务器: 版本:17.03.2-ce API版本:1.27(最低版本1.12)

spotify/docker客户端版本:8.11.7

我如何调用docker构建函数:

final AtomicReference<String> imageIdFromMessage = new AtomicReference<>();

final String returnedImageId = dockerClient.build(

Paths.get("/absolute/path/to/folder"), image.getImageName(), dockerfilefilename,new ProgressHandler() {
    @Override
    public void progress(ProgressMessage message) throws DockerException {

        final String imageId = message.buildImageId();

        if (imageId != null) {
            imageIdFromMessage.set(imageId);
        }
    }
});

我可以提交任何其他相关信息,并将感谢任何帮助或想法

编辑以添加请求的信息:

image是docker图像的个人数据表示,唯一相关的是它有我想标记docker的名称

dockerfilefilename还是一个包含dockerfile文件名的字符串。例如,字符串“Dockerfile”

dockerClient是DockerClient的一个实例。它是这样创建的:

`

    DockerClient dc = DefaultDockerClient.fromEnv().build();
    final RegistryAuth registryAuth = RegistryAuth.builder() //TODO change to external config
            .email("REDACTED")
            .username("REDACTED")
            .password("REDACTED")
            .build();
    final int statusCode = dc.auth(registryAuth);

    return dc;

`

我查过了,状态码实际上是200。我在驱动程序中尝试了很多Docker命令,都很成功


共 (2) 个答案

  1. # 1 楼答案

    我遇到了以下问题。在我的dockerfile文件中,维护者拼写错误。 请尝试使用docker build-t构建映像进行调试

  2. # 2 楼答案

    我遇到了同样的问题(正如我在对问题的评论中所说的),并设法解决了它。您得到的错误是一个一般性错误,是Docker客户端代码内部的健全性检查失败导致的,这可能是由无数不同的事情造成的

    要获得导致健全性检查失败的具体原因,可以查看进度处理程序中的message.error(),在我的例子中,错误消息非常清楚