Не удается создать образ докера из 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

Другие вопросы по тегам