【问题标题】:Docker maven plugin ClientProtocolException (Windows 10 using Docker Toolbox)Docker maven 插件 ClientProtocolException(Windows 10 使用 Docker Toolbox)
【发布时间】:2016-04-21 07:16:44
【问题描述】:

我正在尝试使用 docker-maven-plugin(由 spotify 提供:https://github.com/spotify/docker-maven-plugin)构建 docker 映像,但事情并没有真正解决。起初我得到了这个例外:

org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375

我发现我必须创建一个环境。变量来解决这个问题(https://github.com/spotify/docker-maven-plugin/issues/135):

set DOCKER_HOST=set DOCKER_HOST=tcp://192.168.99.100:2376

所以在设置了那个环境之后。变量我不断收到这个 ClientProtocolException:

[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:0.3.258:build (default-cli) on project docker_micro_maven: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException: The server failed to respond with a valid HTTP response

我不知道如何解决这个问题,任何意见将不胜感激。

【问题讨论】:

    标签: java maven docker spotify docker-toolbox


    【解决方案1】:

    您必须在 2375 端口上使用主机侦听配置 virtualbox 端口转发:

    > VBoxManage modifyvm "default" --natpf1 "guestssh,tcp,,2375,,2376"

    guestssh是端口转发的名称,可以选择名称。

    如果无法识别VBoxManage,您可以将其替换为完整路径:

    "pathVirtualBox\VBoxManage.exe"

    之后,如果您遇到类似的问题 “服务器未能响应有效的 HTTP 响应” 从中复制证书文件
    “%USER%.docker\machines\certs”

    “%USER%.docker”
    导致 docker-maven-plugin 在“%USER%.docker”中读取这些文件(不要复制目录证书,只复制文件)。

    我认为我们可以覆盖 maven 属性来替换端口 2375 和证书路径,但我仍然找不到它。

    【讨论】:

    • 太糟糕了,我不能给这个答案更多的赞成票。在找到此答案之前配置了端口转发,但仍在为“服务器未能以有效的 HTTP 响应响应”而苦苦挣扎。按照此答案中的建议复制证书后,一切都按预期开始工作。非常感谢!
    【解决方案2】:

    通过以下方式解决此问题:

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <imageName>yourImageName</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <dockerHost>https://192.168.99.100:2376</dockerHost>
                    <dockerCertPath>/Users/your_user/.docker/machine/machines/default</dockerCertPath>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
    

    这两个标签很重要:

    <dockerHost>https://192.168.99.100:2376</dockerHost>
    <dockerCertPath>/Users/your_user/.docker/machine/machines/default</dockerCertPath>
    

    我正在使用一个 dockerfile,你必须用这个标签定义哪个路径:

    <dockerDirectory>src/main/docker</dockerDirectory>  
    

    现在您可以通过以下方式构建您的 jar 并生成 docker 映像:

    mvn 打包 docker:build

    【讨论】:

      【解决方案3】:

      docker-machine 环境默认

      set DOCKER_HOST=tcp://192.168.99.100:2376
      set DOCKER_MACHINE_NAME=default
      set DOCKER_TLS_VERIFY=1
      set DOCKER_TOOLBOX_INSTALL_PATH=C:\Program Files\Docker Toolbox
      set DOCKER_CERT_PATH=C:\Users\panhl-a\.docker\machine\machines\default
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-27
        • 2016-03-13
        • 2019-08-24
        • 1970-01-01
        • 1970-01-01
        • 2019-06-24
        • 2017-08-31
        • 1970-01-01
        相关资源
        最近更新 更多