私はDockerを初めて使用します(ただし、開発は初めてです)。
私はこのDockerfileを持っています:
#
# Build stage
#
FROM maven:3.6.3-jdk-8-slim AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package
#
# Package stage
#
FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG war_FILE=/home/app/target/*.war
COPY ${war_FILE} app.war
ENTRYPOINT ["java","-jar","/app.war"]
そして(これまでのところ)ビルドは成功します:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:51 min
[INFO] Finished at: 2020-01-15T08:43:54Z
[INFO] ------------------------------------------------------------------------
しかし、最終的に、Dockerビルドは失敗します。
Removing intermediate container 7c66e8b7dbed
---> 74b1c50c84ad
Step 5/10 : FROM openjdk:8-jdk-alpine
---> a3562aa0b991
Step 6/10 : RUN addgroup -S spring && adduser -S spring -G spring
---> Running in ca236cf9a705
Removing intermediate container ca236cf9a705
---> 0c255ef5868f
Step 7/10 : USER spring:spring
---> Running in 8452dcff6a8a
Removing intermediate container 8452dcff6a8a
---> 6265f412699a
Step 8/10 : ARG war_FILE=/home/app/target/*.war
---> Running in 3b54067b2cca
Removing intermediate container 3b54067b2cca
---> c186c4a7e443
Step 9/10 : COPY ${war_FILE} app.war
COPY failed: no source files were specified
私はおそらく信じられないほど愚かなことをしているでしょうが、どこから探し始めるのかわかりません...
マルチステージビルドでは、各ステージのデータはステージ間で共有されません。
したがって、実際にbuild
ステージ上で、の下にwarファイルを正常に作成しました/home/app/target/
。
ただし、第2段階ではこのパスが存在しないため、エラーが報告されます。
これを解決するには、第2段階を次のように置き換えます。
FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
COPY --from=build /home/app/target/war_name.war app.war
ENTRYPOINT ["java","-jar","/app.war"]
公式ドキュメントからの例。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加