java 无法从Dockerfile构建Docker镜像

gc0ot86w  于 2023-04-28  发布在  Java
关注(0)|答案(3)|浏览(233)

你好,我正在尝试从Docker文件构建Docker镜像,并获得以下错误:
java.lang.IllegalStateException:在com上生成后无法获取映像ID或摘要。google.common.base.Preconditions.checkState(Preconditions.java:444)~[guava-21.在com.spotify.docker.客户端.DefaultDockerClient$BuildProgressHandler。getImageId(DefaultDockerClient.java:298)~[docker-client-8.11.7.jar:8.11.7]在com. spotify。docker.client.DefaultDockerClient$BuildProgressHandler。access$1200(DefaultDockerClient.java:287)~[docker-client-8.11.7.jar:8.11.7]在 www.example.com (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 build函数:

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命令与驱动程序都是成功的。

rekjcdws

rekjcdws1#

我遇到了同样的问题(正如我在评论中提到的问题),并设法解决了它。你得到的错误是一个通用的错误,它是由Docker客户端代码中的一个失败的健全性检查导致的,这可能是由无数不同的事情引起的。
要获得导致健全性检查失败的具体原因,您可以查看进度处理程序中的message.error()-在我的例子中,错误消息非常清楚。

polkgigr

polkgigr2#

我在我的结束有以下问题。在我的dockerfile中,maintainer被拼错了。请尝试使用docker build -t构建镜像进行调试。

cyej8jka

cyej8jka3#

在Dockerfile中,添加了一个环境变量,但缺少ENV。
正确:ENV KEYCLOAK_ADMIN=keycloak
错误:KEYCLOAK_ADMIN=keycloak

相关问题