Docker для Windows и docker-maven-plugin — SSLException: нераспознанное сообщение SSL, ошибка подключения с открытым текстом

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

[ИНФОРМАЦИЯ] ----------------------------------------------- ------------------------- [ИНФОРМАЦИЯ] ОШИБКА ПОСТРОЙКИ [ИНФОРМАЦИЯ] ----------------- -------------------------------------------------- ----- [ИНФО] Общее время: 25.006 с [ИНФО] Завершено: 2017-01-19T14:48:45-02:00 [ИНФО] Окончательная память: 68M/619M [ИНФО] ------ -------------------------------------------------- ---------------- [ОШИБКА] Не удалось выполнить цель com.spotify:docker-maven-plugin:0.4.13:build (default-cli) в проекте monitoramentoRS: поймано исключение: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: javax.net.ssl.SSLException: нераспознанное сообщение SSL, незашифрованное соединение? -> [Помощь 1]

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

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

Кто-нибудь смог заставить docker-maven-plugin создать образ докера в 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>

person Paulo Merson    schedule 20.01.2017    source источник
comment
Вы используете Windows 10 Pro? Не могли бы вы вставить конфигурацию плагина docker-maven-plugin и %HOME%\.docker\config.json? У меня также были некоторые проблемы при использовании его в Windows 10.   -  person Eric Hans    schedule 14.02.2017
comment
@EricHans: да, это Win 10 Pro. Я добавил к вопросу конфигурацию плагина и содержимое config.json.   -  person Paulo Merson    schedule 14.02.2017
comment
Какой у вас облачный провайдер? Вы добавили сертификат сервера в докер или вошли в систему, игнорируя tls?   -  person Eric Hans    schedule 14.02.2017
comment
Облачный провайдер — OpenShift (oc v1.3.0 kubernetes v1.3.0+52492b4). Я не добавлял сертификат сервера, но в моей конфигурации демона докеров мой частный реестр докеров OpenShift указан в коллекции небезопасных реестров.   -  person Paulo Merson    schedule 14.02.2017


Ответы (1)


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

oc логин -u пользователь https://url-to-openshift:port --insecure-skip- tls-подтвердить

а также

docker login -u user -p token url-to-private-registry

а затем откройте %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"
      }
   }
}

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

person Eric Hans    schedule 14.02.2017
comment
Удаление %USER%\.docker решило проблему, и я смог собрать образ с помощью docker-maven-plugin. Когда я добавил -DpushImageTag, я действительно увидел ошибку: Обнаружено исключение: неавторизованный: требуется аутентификация. Я удалил элемент credsStore, и после команды docker login значение auth автоматически заполнялось, а затем работало -DpushImageTag. - person Paulo Merson; 14.02.2017