Docker для Windows и docker-maven-plugin - ошибка "SSLException: нераспознанное SSL-сообщение, незашифрованное соединение"

Я использую Docker для Windows v1.13.0 и docker-maven-plugin v0.4.13 на моей локальной машине с Windows 10 Pro. я использую mvn clean package docker:build построить свой проект и создать образ докера. Сборка не удалась:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 25.006 s
[INFO] Finished at: 2017-01-19T14:48:45-02:00
[INFO] Final Memory: 68M/619M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.4.13:build (default-cli) on project monitoramentoRS: Exception caught:
java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: javax.net.ssl.SSLException:
Unrecognized SSL message, plaintext connection? -> [Help 1]

Создание образа докера в командной строке напрямую (docker build -t ...) работает отлично. Плагин maven прекрасно работал с панелью инструментов Docker и Oracle Virtual Box на Windows 7.

Поэтому я полагаю, что существует проблема конфигурации, связанная с TLS, между docker-maven-plugin и демоном Docker для Windows. Я пробовал разные комбинации конфигурации, используя DOCKER_HOST (без указания порта, 2375, 2376), DOCKER_TLS_VERIFY, а также DOCKER_TLS но безрезультатно. Также попробовал "tls" а также "tlsverify" атрибуты "расширенной" конфигурации Docker для Windows.

Кто-нибудь смог заставить docker-maven-plugin создать образ Docker на Docker для Windows?

Мой файл%HOME%.docker\config.json содержит только auths коллекция:

{
    "auths": {
        "our-corporate-private-docker-registry-address": {
            "auth": "an-authorization-token"
        },
        "https://index.docker.io/v1/": {
            "auth": "an-authorization-token"
        }
    }
}

Ниже приводится конфигурация docker-maven-plugin.

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.13</version>
    <configuration>
        <useConfigFile>false</useConfigFile> <!-- true yields the same error -->
        <registryUrl>${docker.private.registry}</registryUrl>
        <imageName>${docker.private.registry}/myrepo/myimage</imageName>
        <imageTags>
            <imageTag>latest</imageTag>
        </imageTags>
        <dockerDirectory>${basedir}/docker</dockerDirectory>  <!-- Dockerfile location -->
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>                                           <include>${project.build.finalName}.${project.packaging}</include>
            </resource>
        </resources>
    </configuration>
</plugin>

1 ответ

Решение

В%HOME%.docker может быть какой-то элемент конфигурации, влияющий на связь с docker-maven-plugin. Попробуйте удалить папку%HOME%.docker и перезапустить Docker. После этого запустите

oc login -u пользователь https://url-to-openshift:port --insecure-skip-tls-verify

а также

вход в докер -u пользователь -p токен URL-адрес-частный-реестр

а затем откройте%HOME%.docker, и если ваш файл выглядит так:

{
   "auths": {
      "url-to-private-registry": {}
   },

   "credsStore": "wincred"    
}

затем удалите часть credsStore, потому что плагин spotify docker-maven-plugin не поддерживает его.

Пример:

{
   "auths": {
      "url-to-private-registry": {}
   }
}

Когда вы снова запустите вход в Docker, он снова сгенерирует токен, и у вас не должно возникнуть проблем с аутентификацией.

После входа ваш%HOME%.docker\config.json будет выглядеть так:

{
   "auths": {
      "url-to-private-registry": {
          "auth:" "token-that-docker-maven-plugin-needs-when-property-useConfigFile-is-true"
      }
   }
}

По крайней мере, у меня это сработало.

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