Docker for Windows和docker-maven-plugin – “SSLException:无法识别的SSL消息,明文连接”错误

我在本地Windows 10 Pro机器上使用Docker for Windows v1.13.0和docker-maven-plugin v0.4.13。 我正在使用mvn clean package docker:build构build我的项目并生成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] 

在命令行上直接创builddocker镜像( docker build -t ... )可以正常工作。 Maven插件在Windows 7上使用Docker工具箱和Oracle Virtual Box工作正常。

因此,我相信docker-maven-plugin和Docker for Windows守护进程之间存在与TLS相关的configuration问题。 我已经尝试了不同的configuration组合使用DOCKER_HOST (无端口指示, DOCKER_TLS_VERIFY ), DOCKER_TLS_VERIFYDOCKER_TLS无济于事。 还尝试了"tls"高级”Docker for Windows守护程序configuration的"tls""tlsverify"属性。

任何人都可以使Docker-Maven-plugin在Docker for Windows上创buildDocker镜像吗?

我的%HOME%.docker \ config.json文件只包含一个授权集合:

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

以下是docker-maven-pluginconfiguration。

 <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> 

在%HOME%.docker下可能会有一些configuration元素影响与docker-maven-plugin的通信。 尝试删除您的%HOME%.docker文件夹并重新启动docker。 之后,运行

oclogin-u用户https:// url-to-openshift:端口 –insecure-skip-tls-verify

dockerlogin-u用户-p令牌url-to-private-registry

然后打开%HOME%.docker,如果你的文件是这样的:

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

然后删除credsStore部分,因为spotify docker-maven-plugin不支持它。

例:

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

当您再次运行dockerlogin时,它将再次生成令牌,并且不应该有任何身份validation问题。

login后,您的%HOME%.docker \ config.json将如下所示:

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

至less,它为我工作。