Docker 对于 Windows 和 docker-maven-plugin - "SSLException: Unrecognized SSL message, plaintext connection" 错误
Docker for Windows and docker-maven-plugin - "SSLException: Unrecognized SSL message, plaintext connection" error
我正在使用 Docker Desktop for Windows v1.13.0 和 docker-maven-plugin v0.4.13 在我本地 Windows 10 Pro 机器上。我正在使用 mvn clean package docker:build
构建我的项目并生成 docker 图像。构建失败:
[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 图像 (docker build -t ...
) 效果很好。 Maven 插件在 Docker 工具箱和 Windows 7 上的 Oracle Virtual Box 上运行良好。
因此,我认为 docker-maven-plugin 和 Windows 守护程序的 Docker 之间存在与 TLS 相关的配置问题。我尝试了使用 DOCKER_HOST
(无端口指示,2375、2376)、DOCKER_TLS_VERIFY
和 DOCKER_TLS
的不同配置组合,但均无济于事。还为 Windows 守护程序配置尝试了 "advanced" Docker 的 "tls"
和 "tlsverify"
属性。
有没有人能够让 docker-maven-plugin 在 Docker 上为 Windows 创建一个 docker 图像?
我的 %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>
%HOME%.docker 下可能有一些配置元素影响与 docker-maven-plugin 的通信。尝试删除您的 %HOME%.docker 文件夹并重新启动 docker。
之后,运行
oc login -u user https://url-to-openshift:port --insecure-skip-tls-verify
和
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"
}
}
}
至少,它对我有用。
我正在使用 Docker Desktop for Windows v1.13.0 和 docker-maven-plugin v0.4.13 在我本地 Windows 10 Pro 机器上。我正在使用 mvn clean package docker:build
构建我的项目并生成 docker 图像。构建失败:
[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 图像 (docker build -t ...
) 效果很好。 Maven 插件在 Docker 工具箱和 Windows 7 上的 Oracle Virtual Box 上运行良好。
因此,我认为 docker-maven-plugin 和 Windows 守护程序的 Docker 之间存在与 TLS 相关的配置问题。我尝试了使用 DOCKER_HOST
(无端口指示,2375、2376)、DOCKER_TLS_VERIFY
和 DOCKER_TLS
的不同配置组合,但均无济于事。还为 Windows 守护程序配置尝试了 "advanced" Docker 的 "tls"
和 "tlsverify"
属性。
有没有人能够让 docker-maven-plugin 在 Docker 上为 Windows 创建一个 docker 图像?
我的 %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>
%HOME%.docker 下可能有一些配置元素影响与 docker-maven-plugin 的通信。尝试删除您的 %HOME%.docker 文件夹并重新启动 docker。 之后,运行
oc login -u user https://url-to-openshift:port --insecure-skip-tls-verify
和
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"
}
}
}
至少,它对我有用。