无法从Dockerfile构建Docker镜像

3

你好,我正在尝试从Docker文件构建Docker镜像,但是遇到以下错误:

java.lang.IllegalStateException: 在构建后未能获取图像ID或摘要 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-client版本: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
dockerClientimagedockerfilefilename 是在哪里声明的,它们分别代表什么? - scigs
我编辑了页面,包括所请求的信息。 - PSilvestre
你有没有修复或解决这个问题的机会?我昨天遇到了同样的问题,到现在为止还不知道为什么会发生 :( - Paweł Motyl
我从Maven插件中得到了相同的消息,通过删除.dockerignore文件,我能够解决它:https://github.com/spotify/dockerfile-maven/issues/25#issuecomment-310667051 - Slava Semushin
3个回答

2

我遇到了与问题相同的情况(正如我在评论中所述),并设法解决了它。您收到的错误是通用错误,由Docker客户端代码内部的失败的合理性检查引起,可能由许多不同的事物引起。

要获取导致合理性检查失败的具体原因,您可以查看进度处理程序中的message.error() - 在我的情况下,那里的错误消息非常清楚。


1
我在我的环境中遇到了以下问题。在我的dockerfile中,维护者的拼写错误了。 请尝试使用docker build -t <镜像名>来构建镜像进行调试。

0
在Dockerfile中添加了一个环境变量,但是忘记加上ENV。
正确的写法是: ENV KEYCLOAK_ADMIN=keycloak
错误的写法是: KEYCLOAK_ADMIN=keycloak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接