3

我在本地 Windows 10 Pro 机器上使用Docker Desktop for Windows v1.13.0 和 docker -maven-plugin v0.4.13。我mvn clean package docker:build用来构建我的项目并生成 docker 映像。构建失败:

[信息] --------------------------------------------- ------------------------- [信息] 构建失败 [信息] ----------------- -------------------------------------------------- ----- [INFO] 总时间:25.006 s [INFO] 完成时间:2017-01-19T14:48:45-02:00 [INFO] 最终内存:68M/619M [INFO] ------ -------------------------------------------------- ---------------- [错误] 无法在项目监视器上执行目标 com.spotify:docker-maven-plugin:0.4.13:build (default-cli): 捕获异常: java.util.concurrent.ExecutionException:com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException:javax.net.ssl.SSLException:无法识别的 SSL 消息,明文连接?-> [帮助 1]

直接在命令行上创建 docker 镜像 ( docker build -t ...) 工作正常。maven 插件在 Windows 7 上与 Docker 工具箱和 Oracle Virtual Box 一起工作得很好。

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

有没有人能够让 docker-maven-plugin 在 Docker for 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>
4

1 回答 1

2

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

oc login -u 用户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 login 时,它将再次生成令牌,您不应该有任何身份验证问题。

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

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

至少,它对我有用。

于 2017-02-14T15:50:51.170 回答