docker工的春季启动无法find有效的证书path来请求目标错误

我正在使用spring引导,并试图用Docker进行设置。 我尝试了一切,我可以find谷歌,似乎没有让我去。 我在跑

mvn clean package docker:build 

运行这个命令将执行spring-boottesting,运行数据库迁移,构buildJAR,然后在构buildDocker镜像时出现以下错误:

 Failed to execute goal com.spotify:docker-maven-plugin:0.4.9:build (default-cli) on project app: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1] 

这里是我使用的Dockerfile:

 FROM java:8-jdk export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/james/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" EXPOSE 8080 VOLUME /tmp ADD app-0.0.1-SNAPSHOT.jar app.jar RUN sh -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 

这里是我的docker-maven-pluginconfiguration:

  ... pom stuff <docker.image.prefix>jamesone1</docker.image.prefix> ... other pom stufff <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.9</version> <configuration> <dockerHost>https://192.168.99.100:2376</dockerHost> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> 

我正在使用docker的Mac和我使用以下环境的docker机

 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/james/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" 

这是怎么回事?! 我错过了什么吗?

解决这个在Windows 10中通过:

  <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,你必须用这个标签来定义哪个path:

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

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

mvn包docker:build

我认为,在mac上,只有价值才会有所不同:

 <dockerCertPath>/Users/your_user/.docker/machine/machines/default</dockerCertPath> 

我没有插件就自己build立了docker镜像:

 docker build -f Dockefile . 

而我的Dockefile(已经改名):

 FROM java:8-jdk EXPOSE 8080 #VOLUME /tmp ADD target/app-0.0.1-SNAPSHOT.jar /opt/demo/app-0.0.1-SNAPSHOT.jar CMD ["java","-jar","/opt/demo/app-0.0.1-SNAPSHOT.jar"] 

我然后像这样运行它:

  docker run <container id here> 

我只是无法让mvn插件工作!

编辑

此外,我最终创build了一个docker-compose.yml ,使事情变得简单了!

你可以定义属性,比如你想打开的端口,dockerfile的位置,然后运行docker-compose,它会神奇的build立+运行docker镜像!

示例docker-compose.yml,我正在使用:

 version: '2' services: web: build: . ports: - "8080:8080" 

build立引用的Dockerfile的位置。 *注意你可能需要将Dockerfile + yml文件放在同一个位置!

端口引用我想打开的端口。 现在我可以到localhost:8080 ,我的请求将被转发到docker集装箱。

在这里阅读Docker容器的更多信息:

https://docs.docker.com/compose/gettingstarted/