java - 无法从 Dockerfile 构建 docker 映像
问题描述
您好我正在尝试从 Docker 文件构建 Docker 映像并收到以下错误:
java.lang.IllegalStateException:com.google.common.base.Preconditions.checkState(Preconditions.java:444) ~[guava-21.0.jar:na] 在 com.spotify.docker 构建后无法获取图像 ID 或摘要.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] 在 com.spotify.docker.client.DefaultDockerClient.build(DefaultDockerClient.java:1481) ~[docker-client-8.11.7.jar: 8.11.7]
我可以从命令行构建完全相同的 Dockerfile,但我无法调试它,因为堆栈跟踪信息不是很丰富。下面我留下一些可能相关的信息:
码头工人版本:
客户端:版本: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 命令,这些命令都是成功的。
解决方案
我遇到了同样的问题(正如我在对该问题的评论中所述)并设法解决了它。您收到的错误是一个通用错误,是由于 Docker 客户端代码内部的健全性检查失败导致的,这可能是由无数不同的事情引起的。
要了解导致完整性检查失败的具体原因,您可以message.error()
在进度处理程序中查看 - 在我的情况下,那里的错误消息非常清楚。
推荐阅读
- vb.net - Linq to Entities,选择有子实体的父实体,子实体匹配条件
- swift - 是否可以在约束中包含 Core Data 实体类型?
- windows - 我最新的 Windows 10 SDK 安装不包括 rc.exe 和 rcdll.exe,所以我收到 LNK1158 错误
- networking - 将 Kong Admin API 暴露给内部网络
- c++ - 将 QVector 缩小到最后 10 个元素并重新排列一项
- reactjs - Icomoon:删除 icomoon.ttf 后 Xcode 构建失败,仍然正常运行
- mysql - Hibernate 没有从 MySQL 数据库中检索到给定日期的正确行
- slack - 如何向 slack 中的用户提供消息的删除 URL?
- angular - 如何使用 Angular 和 Flutter(都是 Dart)为工作区设置 VS Code 调试?
- json - 烧瓶在返回 jsonify 之前挂起((无输出错误))