Docker maven 插件 ClientProtocolException(Windows 10 使用 Docker 工具箱)
Docker maven plugin ClientProtocolException (Windows 10 using 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
所以在设置环境之后。变量我不断收到此 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
我不知道如何解决这个问题,我们将不胜感激。
您必须配置 virtualbox 端口转发,主机监听 2375 端口:
> VBoxManage modifyvm "default" --natpf1 "guestssh,tcp,,2375,,2376"
guestssh是端口转发的名字,你可以自己选择。
如果VBoxManage
无法识别,您可以用完整路径替换它:
"pathVirtualBox\VBoxManage.exe"
之后如果您遇到类似的问题
"The server failed to respond with a valid HTTP response"
从复制证书文件
"%USER%.docker\machines\certs"
至
"%USER%.docker"
原因 docker-maven-plugin 在“%USER%.docker”中读取此文件(不复制目录证书,仅复制文件)。
我想我们可以覆盖 maven 属性来替换端口 2375 和证书路径,但我仍然找不到它。
通过以下方式解决了这个问题:
<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>
我正在使用 docker 文件,您必须使用此标记定义哪个路径:
<dockerDirectory>src/main/docker</dockerDirectory>
现在您可以构建您的 jar 并通过以下方式生成 docker 图像:
mvn 包docker:build
docker-机器环境默认值
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
我正在尝试使用 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
我不知道如何解决这个问题,我们将不胜感激。
您必须配置 virtualbox 端口转发,主机监听 2375 端口:
> VBoxManage modifyvm "default" --natpf1 "guestssh,tcp,,2375,,2376"
guestssh是端口转发的名字,你可以自己选择。
如果VBoxManage
无法识别,您可以用完整路径替换它:
"pathVirtualBox\VBoxManage.exe"
之后如果您遇到类似的问题
"The server failed to respond with a valid HTTP response"
从复制证书文件
"%USER%.docker\machines\certs"
至
"%USER%.docker"
原因 docker-maven-plugin 在“%USER%.docker”中读取此文件(不复制目录证书,仅复制文件)。
我想我们可以覆盖 maven 属性来替换端口 2375 和证书路径,但我仍然找不到它。
通过以下方式解决了这个问题:
<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>
我正在使用 docker 文件,您必须使用此标记定义哪个路径:
<dockerDirectory>src/main/docker</dockerDirectory>
现在您可以构建您的 jar 并通过以下方式生成 docker 图像:
mvn 包docker:build
docker-机器环境默认值
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