我想在github上推动提交时在Heroku平台上部署使用Gradle构建的Dockerized Spring-Boot应用程序。
- 我通过在本地构建图像,然后部署它,成功地用CLI部署了Docker映像
- 我用" Heroku-18"堆栈成功地"在Github Push"上部署了。每次提交后,Heroku都会发现我的项目是一个Gradle,构建并毫无问题地部署它。此方法不会触发Docker。
现在,我想切换到"容器"堆栈,供Heroku构建我的Dockerfile并在每个提交后部署我的应用程序。正确检测到dockerfile,但是由于未生成罐子,因此dockerfile步骤失败。
如何触发heroku侧的罐子的产生,以使dockerfile能够将此罐子复制到容器中?
Heroku Logs
=== Fetching app code
=== Building web (Dockerfile)
Sending build context to Docker daemon 50.69kBStep 1/11 : FROM openjdk:11-jre-slim
11-jre-slim: Pulling from library/openjdk
...
Step 4/11 : ADD build/libs/myapp-1.0-SNAPSHOT.jar /app/myapp.jar
ADD failed: stat /var/lib/docker/tmp/docker-builder545575378/build/libs/myapp-1.0-SNAPSHOT.jar: no such file or directory
heroku.yml
build:
docker:
web: Dockerfile
dockerfile
FROM openjdk:11-jre-slim
VOLUME /var/log/my-app
ARG JAR_FILE
ADD build/libs/my-app-1.0-SNAPSHOT.jar /app/my-app.jar
RUN chgrp -R 0 /app
RUN chmod -R g+rwX /app
RUN chgrp -R 0 /var/log/my-app
RUN chmod -R g+rwX /var/log/my-app
CMD [ "-jar", "/app/my-app.jar" ]
ENTRYPOINT ["java"]
EXPOSE 8080
可能您不能在dockerfile之外做到这一点。
但是您可以使用Docker多阶段构建:
FROM adoptopenjdk/openjdk14-openj9:alpine as build
COPY . /opt/app/src
WORKDIR /opt/app/src
RUN ./gradlew clean bootJar
FROM adoptopenjdk/openjdk14-openj9:alpine-jre
COPY --from=build opt/app/app.jar /opt/app/app.jar
CMD ["java", "-server", "-XX:MaxRAM=256m", "-jar", "/opt/app/app.jar"]