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容器的更多信息: