Не удается создать образ докера из Dockerfile
Здравствуйте, я пытаюсь создать образ Docker из файла Docker и получить следующую ошибку:
java.lang.IllegalStateException: Не удалось получить идентификатор изображения или дайджест после сборки на com.google.common.base.Preconditions.checkState(Preconditions.java:444) ~[guava-21.0.jar:na] на com.spotify.docker.client.DefaultDockerClient$BuildProgressHandler.getImageId(DefaultDockerClient.java:298) ~[docker-client-8.11.7.jar:8.11.7] в com.spotify.docker.client.DefaultDockerClient$BuildProgressHandler.access$1200(по умолчанию Docker):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:
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
это представление личных данных образа докера, единственное, что имеет к этому отношение, это имя, которое я хочу пометить в докере.
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 с драйвером, которые успешно.
3 ответа
Я столкнулся с той же проблемой (как я уже сказал в комментарии к вопросу) и сумел ее исправить. Полученная вами ошибка является общей и является результатом неудачной проверки работоспособности в клиентском коде Docker, которая может быть вызвана множеством разных вещей.
Чтобы узнать конкретную причину, по которой проверка работоспособности не удалась, вы можете посмотреть в message.error()
в обработчике прогресса - в моем случае сообщение об ошибке, которое было там, было очень ясно.
У меня была следующая проблема в моем конце. В моем докер-файле сопровождающий был неправильно написан. Пожалуйста, отладьте, попытавшись собрать образ с помощью docker build -t .
В Dockerfile добавлена переменная среды, но пропущен ENV.
Правильно:ENV KEYCLOAK_ADMIN=keycloak.
Плохо: KEYCLOAK_ADMIN=keycloak