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_VERIFY
和DOCKER_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,它为我工作。