我的機器上安裝了java 13,我有一個專案,我在Docker檔案中提到了java 11,所以這里應該發生的是,當我構建docker鏡像時,它應該是建立在java 11之上的。
但令人驚訝的是,我在運行容器時得到了這個錯誤 com/example/Application已被較新版本的Java Runtime編譯了。
Docker檔案:
FROM openjdk:11.0.2-jdk
# 解壓發行版焦油
ADD /distributions/application.tar /
RUN mkdir /src
RUN mkdir /src/main
RUN mkdir /src/main/resources
RUN mkdir /src/main/resources/ssl
ADD ./main/resources/ssl/keystore.p12 /src/main/resources/ssl/keystore.p12
# 用未版本的名字創建JAR
RUN cp /application/lib/application-*.jar /application/lib/application.jar
ENTRYPOINT java -jar /application/lib/application.jar
有人對此有什么解釋嗎?
uj5u.com熱心網友回復:
你可以使用與此類似的東西:
FROM eclipse-temurin:16.0.2_7-jdk-centos7 AS builder
VOLUME /tmp
復制 . .
作業區//
RUN ./gradlew assemble
FROM eclipse-temurin:16.0.2_7-jdk-centos7
作業目錄 /
COPY --from=builder build/libs build/libs
運行ls -lah
RUN jar -xvf build/libs/*.jar
復制 build/libs/BOOT-INF/lib app/lib
COPY build/libs/META-INF/ app/META-INF
COPY build/libs/BOOT-INF/classes app/。
運行 rm -rf build/libs
ENTRYPOINT ["java", "-cp", "app:app/lib/*", "com.example.springtest.SpringTestApplication"]
這實際上是一個多階段的docker檔案,在docker容器內部構建鏡像。這意味著你對構建的Java版本的選擇是鎖定的,不會受到你在本地機器上運行的影響。然而,正如之前提到的,這里有一些注意事項:
因此,基于上述所有情況,我建議將您的開發環境與您的部署目標相一致。這將使您能夠在本地構建應用程式,然后簡單地將必要的工件/資產復制到創建的容器中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326367.html
標籤:
