Docker maven插件ClientProtocolException(使用Docker Toolbox的Windows 10)

时间:2016-01-15 16:19:21

标签: java maven docker spotify docker-toolbox

我正在尝试使用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

docker_host

所以设定那个环境后。变量我一直得到这个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

我不知道如何解决这个问题,任何输入都会非常感激。

3 个答案:

答案 0 :(得分:5)

您必须使用主机侦听2375端口配置虚拟机端口转发:

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

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

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

" pathVirtualBox \ VBoxManage.exe"

之后如果遇到类似的问题 "服务器无法响应有效的HTTP响应" 从中复制certs文件
"%USER%.docker \机\证书"

"%USER%.docker"
因为docker-maven-plugin在"%USER%.docker"中读取此文件(不要复制目录证书,只复制文件)。

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

答案 1 :(得分:3)

修正了这个:

        <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

答案 2 :(得分:0)

docker-machine env default

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