我从这里开始学习Spring Boot Docker教程。
我在上网时得到了确切的结果。现在我需要在没有互联网连接的环境中产生同样的结果。我将maven存储库和docker映像复制到新环境中。我确信maven和docker已经开始运行了。
当我尝试运行以下命令com.google.cloud.tools:jib-maven-plugin:dockerBuild -Dimage=eureka
时,我收到了错误消息。我想插件找不到一些文件,但不确定是哪些。
我正在添加错误消息
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------------< com.ays:eureka >---------------------------
[INFO] Building eureka 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- jib-maven-plugin:2.1.0:dockerBuild (default-cli) @ eureka ---
[INFO]
[INFO] Containerizing application to Docker daemon as eureka...
[WARNING] Base image 'gcr.io/distroless/java:8' does not use a specific image digest - build may not be reproducible
[ERROR] I/O error for image [gcr.io/distroless/java]:
[ERROR] org.apache.http.conn.ConnectTimeoutException
[ERROR] Connect to gcr.io:443 [gcr.io/64.233.184.82] failed: connect timed out
[INFO] Executing tasks:
[INFO] [============ ] 40,0% complete
[INFO] > building image to Docker daemon
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.409 s
[INFO] Finished at: 2020-04-13T16:37:23+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:2.1.0:dockerBuild (default-cli) on project eureka: Connect to gcr.io:443 [gcr.io/64.233.184.82] failed: connect timed out -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
有人能告诉我该去哪里看吗?或者我现在缺了什么吗?
这是我的DockerFile
FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","hello.Application"]`
我没有更改DockerFile中的任何内容。
如果没有指定基本映像,Jib 3.0+默认情况下会使用adoptopenjdk:8-jre
作为Java 8应用程序的基本映像。(在3.0之前,起重臂使用gcr.io/distroless/java:8
作为默认值。(
当您不使用特定的图像摘要(如gcr.io/distroless/java@sha256:...
(,而是使用标签(在Jib<3.0的情况下为:8
(作为基础图像时,标签可能会随着时间的推移指向不同的图像。也就是说,如果稍后在不同的机器上构建图像,Jib可能会获得与以前略有不同的基本图像。因此发出以下警告:
[WARNING] Base image 'gcr.io/distroless/java:8' does not use a specific image digest - build may not be reproducible
因此,当您不使用摘要时,Jib会联系注册表(gcr.io
(,检查本地缓存的映像(不在本地Docker引擎缓存中,而是Jib自己的缓存中(是否是最新的。如果没有,Jib将下载更新后的图像。这就是您在脱机时出现错误的原因。
你有两个选择。
在命令行上将
--offline
传递给Maven。然后,Jib将使用缓存的基本映像;将不会有联机连接。当然,为了实现这一点,Jib之前应该缓存基本图像;你需要事先至少在线运行一次Jib。使用摘要来确定特定的基础图像。例如,在您的
pom.xml
中,<configuration> <from><image>adoptopenjdk@sha256:9cb8bc7356ec2d9de56f3be3d8204a846ca0a3220af059aa67c35d53c7138e17</image></from> </configuration>
如果愿意,可以同时指定标记和摘要。但是,在这种情况下,标记将不起作用,仅作为注释。
<from><image>adoptopenjdk:8-jre@sha256:9cb8bc7356ec2d9de56f3be3d8204a846ca0a3220af059aa67c35d53c7138e17</image></from>
要了解要使用的摘要,请查看
adoptopenjdk
Docker Hub存储库。另一种方法是在线运行Jib。警告之后,您将看到一条消息,报告标记的当前摘要。[WARNING] Base image 'adoptopenjdk:8-jre' does not use a specific image digest - build may not be reproducible [INFO] Using base image with digest: sha256:9cb8bc7356ec2d9de56f3be3d8204a846ca0a3220af059aa67c35d53c7138e17
运行本地Docker守护进程时的另一个选项是,通过在基本映像(例如<image>docker://openjdk:11-jre-slim</image>
(前面加上docker://
,使Jib使用守护进程中的映像。然而,根据具体情况,这可能比使用远程基本映像慢一点(但即使在这种情况下也可能不那么慢(。
最后,您可以删除您的Dockerfile
Jib不使用Dockerfile
、Docker CLI或Docker守护进程。