标签: paketo

如何解决用于构建 spring-boot 应用程序的 Paketo buildpack 的内存问题?

我正在使用部署到 AWS BeanStalk 的 spring-boot-maven-plugin 构建 Docker 映像。我通过 2.4.3 spring boot starter 依赖项使用该插件)但是,当容器启动时,我收到以下错误。我对 buildpack 的东西有点陌生,但尝试通过使用网站上描述的 Buildpack 环境变量来解决它。但它对下面错误日志中显示的值完全没有影响。我发现了这个github问题,但不确定它是否相关以及如何使用它。

我正在使用总 RAM 为 1G 的 AWS Micro 实例,它执行滚动更新,因此在启动新映像时,另一个也在运行,直到新映像成功启动,因此启动容器也可以是只有 300MB 可用,但是,在正常运行期间,它还有更多可用空间。

为什么我需要这个内存计算?我不能直接禁用它吗?当我构建 app.jar 的 Docker 映像并将其部署到 aws beanstalk 时,它无需任何内存设置即可正常运行:

码头工人构建。--build-arg JAR_FILE=./target/app.jar -t $APPLICATION_NAME

但我很想通过 spring-boot-maven 插件使用图像构建。请提供有关如何解决此问题的建议?

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <image>
            <name>${image.name}</name>
            <env>
                <tag>${project.version}</tag>
                <!--BPE_APPEND_JAVA_TOOL_OPTIONS>-XX:MaxDirectMemorySize=1M</BPE_APPEND_JAVA_TOOL_OPTIONS-->
                <BPE_JAVA_TOOL_OPTIONS>-Xms1024m -Xmx3048m</BPE_JAVA_TOOL_OPTIONS>
            </env>
        </image>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

部署期间 AWS Beanstalk 错误:

Tue May 18 2021 18:07:14 GMT+0000 (UTC)   INFO   Successfully built aws_beanstalk/staging-app
Tue May 18 2021 18:07:22 GMT+0000 …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-elastic-beanstalk spring-boot-maven-plugin paketo

14
推荐指数
1
解决办法
8413
查看次数

缓存 Cloud Native Buildpacks/Paketo.io pack CLI 在 GitHub Actions 上构建(例如使用 Spring Boot/Java/Maven buildpacks)?

我正在开发一个 Spring Boot 应用程序,应使用 Cloud Native Build Packs / Paketo.io 将其打包到 OCI 容器中。我使用 GitHub Actions 构建它,我的工作流程build.yml如下所示:

name: build

on: [push]

jobs:
  build-with-paketo-push-2-dockerhub:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Login to DockerHub Container Registry
        run: echo $DOCKER_HUB_TOKEN | docker login -u jonashackt --password-stdin
        env:
          DOCKER_HUB_TOKEN: ${{ secrets.DOCKER_HUB_TOKEN }}

      - name: Install pack CLI via apt. See https://buildpacks.io/docs/tools/pack/#pack-cli
        run: |
          sudo add-apt-repository ppa:cncf-buildpacks/pack-cli
          sudo apt-get update
          sudo apt-get install pack-cli

      - name: Build app with pack …
Run Code Online (Sandbox Code Playgroud)

buildpack docker spring-boot github-actions paketo

10
推荐指数
1
解决办法
1319
查看次数

spring boot bootBuildImage paketo ssl 证书位置?

TLDR: spring boot gradlebootBuildImage任务因 x509 证书验证错误而失败(由于 zscaler)。在哪里添加根证书?

信息

我们正在使用 spring boot (2.3) 的新“bootBuildImage”来构建 docker 镜像。

最近,我们的 IT 团队启用了“zscaler 无处不在”,它通过公司支持的“中间人”有效地路由所有 http 和 https 流量,即使用 DNS 来“网关/检查点”网络流量

错误

在此更改后,gradle 失败并显示 X509 证书验证错误:

2021-03-01T08:40:42.120-0600 [QUIET] [system.out]     [creator]     unable to request https://repo.
spring.io/release/org/springframework/cloud/spring-cloud-bindings/1.7.0/spring-cloud-bindings-1.7.0
.jar
2021-03-01T08:40:42.120-0600 [QUIET] [system.out]     [creator]     Get "https://repo.spring.io/release/org/springframework/cloud/spring-cloud-bindings/1.7.0/spring-cloud-bindings-1.7.0.jar": x509: certificate signed by unknown authority
202
Run Code Online (Sandbox Code Playgroud)

更多上下文

  • 弹簧靴 3.7
  • 摇篮
  • 苹果电脑
  • Docker 桌面
  • 特别在 spring-cloud-bindings 上失败

  • 如何克服 x509 ssl 证书验证错误?

我知道应该能够在信任存储中安装 zscaler 根证书,但不清楚哪个信任存储?(以及文件系统上的哪个位置?)

  • 码头工人
  • 帕克托

我不清楚为什么'spring cloud download'失败,但其他下载成功,即这次下载成功:

2021-03-01T08:40:34.790-0600 [QUIET] …
Run Code Online (Sandbox Code Playgroud)

buildpack spring-boot zscaler paketo

7
推荐指数
1
解决办法
443
查看次数

使用 paketo 进行 Spring-Boot docker 构建在 Bitbucket 管道上失败

我的 spring-boot projekts 使用 spring-boot-maven-plugin 及其构建映像目标在 bitbucket.org 上构建其 docker 映像。在管道上,我们总是收到以下 Maven 错误:

Docker API call to 'localhost:2375/v1.24/containers/create' failed with status code 403 "Forbidden"
Run Code Online (Sandbox Code Playgroud)

在docker日志中我发现了以下内容

time="2021-03-25T11:30:59Z" level=info msg="Container create request." ArgsEscaped=false AttachStderr=false AttachStdin=false AttachStdout=false ExposedPorts="map[]" Healthcheck="<nil>" Labels="map[author:spring-boot]" MacAddress= NetworkDisabled=false OnBuild="[]" OpenStdin=false StdinOnce=false StopSignal= StopTimeout="<nil>" Tty=false plugin=pipelines

time="2021-03-25T11:30:59Z" level=info msg="Container create request." AutoRemove=false BlkioDeviceReadBps="[]" BlkioDeviceReadIOps="[]" BlkioDeviceWriteBps="[]" BlkioDeviceWriteIOps="[]" BlkioWeight=0 BlkioWeightDevice="[]" CPUCount=0 CPUPercent=0 CPUPeriod=0 CPUQuota=0 CPURealtimePeriod=0 CPURealtimeRuntime=0 CPUShares=0 CapAdd="[]" CapDrop="[]" Capabilities="[]" Cgroup= CgroupParent= ConsoleSize="[0 0]" ContainerIDFile= CpusetCpus= CpusetMems= DNS="[]" DNSOptions="[]" DNSSearch="[]" DeviceCgroupRules="[]" Devices="[]" ExtraHosts="[]" …
Run Code Online (Sandbox Code Playgroud)

buildpack spring-boot spring-boot-maven-plugin bitbucket-pipelines paketo

7
推荐指数
0
解决办法
590
查看次数

如何将额外的 linux 依赖项添加到 spring-boot buildpack 映像中?

我更新了我的 spring-boot 应用程序以使用 buildpacks 来创建我的 docker-image 而不是 dockerfile。我还在我的应用程序中使用了 Apache POI,并且由于该更新,我在生成 xlsx 文件时收到错误消息。经过一番挖掘,我认为这是因为fontconfig和/或ttf-dejavu包丢失了。但是如何在 dockerimage 中添加这些?使用 dockerfile 我只想添加类似的东西

RUN apt-get update && apt-get install fontconfig ttf-dejavu
Run Code Online (Sandbox Code Playgroud)

但是我如何使用 buildpacks 实现相同的目标?

buildpack docker spring-boot java-font paketo

5
推荐指数
1
解决办法
961
查看次数

错误:启动失败:确定启动命令:没有默认进程时需要命令

将 spring boot 升级到 2.4 后,我们无法运行通过此脚本创建的最终 docker 镜像:

script:
    - echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY
    - apk add openjdk11
    - ./gradlew bootBuildImage --imageName=$DOCKER_IMAGE_INTERMEDIATE
    - docker build -f ./docker/Dockerfile --build-arg base_image=$DOCKER_IMAGE_INTERMEDIATE -t $DOCKER_IMAGE_TAGGED .
    - docker push $DOCKER_IMAGE_TAGGED
    - docker tag $DOCKER_IMAGE_TAGGED $DOCKER_IMAGE_LATEST
    - docker push $DOCKER_IMAGE_LATEST
Run Code Online (Sandbox Code Playgroud)

我们Dockerfile只是创建一个文件夹并将chown其发送给CNB用户:

# The base_image holds a reference to the image created by ./gradlew bootBuildImage
ARG base_image
FROM ${base_image}

ENV SOME_PATH /var/lib/some/files

USER root

RUN …
Run Code Online (Sandbox Code Playgroud)

spring buildpack spring-boot paketo

5
推荐指数
1
解决办法
6571
查看次数

Docker 中通过 buildpack 构建的 Spring Boot 无法加载字体

我的 Spring Boot 应用程序在 Docker 中运行,并由gradlew bootBuildImage. 在 Docker 容器中运行时应用程序无法加载字体

Caused by: java.lang.NullPointerException
    at java.desktop/sun.awt.FontConfiguration.getVersion(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

根本原因似乎是缺少fontconfig软件包 ttf-dejavu。使用时Dockerfile,可以使用apk addyumapt-get等轻松安装这些软件包

但是https://github.com/paketo-buildpacks/spring-boothttps://github.com/paketo-buildpacks/bellsoft-liberica没有安装其他软件包的选项。

是否有构建包(或配置选项)可以构建具有字体支持的 Docker 映像?

buildpack spring-boot-gradle-plugin paketo

5
推荐指数
1
解决办法
2031
查看次数

调用 docker-compose build 命令时执行 Spring buildpacks

我正在使用 Spring Boot 2.3.0.M1引入的 Spring buildpacks来创建基于 Spring 的应用程序的 Docker 映像。一切顺利,我可以通过执行./gradlew bootBuildImageGradle 任务为每个应用程序创建 docker 图像,将 docker-compose 文件指向创建的图像(例如image: spring-test:latest),最后成功运行所有应用程序(docker-compose up)。

即使我有一个 bash 脚本来自动化构建过程,我还是想摆脱这个额外的步骤,让 Spring buildpacks 任务在我运行docker-compose up --build命令时自动执行,这样每个应用程序的 docker 镜像都会被构建并上传到主机的本地 docker 存储库,docker compose 将从该存储库中接管。

我的第一次尝试是为bootBuildImage在主机上执行任务的每个应用程序创建一个虚拟 Dockerfile ,但这需要从 docker 到主机的 SSH 连接,甚至不确定它是否能正常工作。

另一个想法是使用类似的方法,唯一的变化是首先将应用程序的源代码挂载或复制到 docker,配置 buildpacks 将图像存储到主机的本地 docker 镜像 repo(可能是 SSH 连接),最后在 docker 上执行 buildpacks。

我想知道是否有更好,更优雅的解决方案。

spring buildpack docker docker-compose paketo

4
推荐指数
1
解决办法
794
查看次数

在 GitLab CI 中使用 Paketo.io / CloudNativeBuildpacks (CNB) 以及 Kubernetes 执行器和非特权运行器(没有包 CLI 和 docker)

我们希望以最简单的方式使用Paketo.io / CloudNativeBuildpacks (CNB) GitLab CI 。我们的 GitLab 设置使用 AWS EKS 集群,其中包含利用Kubernetes 执行器的非特权 GitLab CI 运行器。我们也不想在构建中使用 Docker带来安全风险。所以我们没有/var/run/docker.sock暴露我们的主机\xe2\x80\x99s,也不想使用docker:dind.

\n

我们找到了一些有关如何将 Paketo 与 GitLab CI 结合使用的指南,例如https://tanzu.vmware.com/developer/guides/gitlab-ci-cd-cnb/。但正如标题下面所述Use Cloud Native Buildpacks with GitLab in GitLab Build Job WITHOUT Using the GitLab Build Template,该方法依赖于 Docker 和 pack CLI。我们试图在我们的.gitlab-ci.yml代码中类似:

\n
image: docker:20.10.9\n\nstages:\n  - build\n\nbefore_script:\n  - |\n    echo "install pack CLI (see https://buildpacks.io/docs/tools/pack/)"\n    apk add --no-cache curl\n    (curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.21.1/pack-v0.21.1-linux.tgz" …
Run Code Online (Sandbox Code Playgroud)

gitlab docker gitlab-ci kubernetes paketo

3
推荐指数
1
解决办法
1414
查看次数

Spring Boot 构建镜像并进行健康检查

我正在使用 Spring Boot 内置的 Gradle:bootBuildImage任务构建我的 Docker 映像,这非常方便,因为我不必维护自己的Dockerfile.

Gradle 任务在底层使用Paketo Bionic Base Stack ,并且可以很好地构建分层的 Docker 镜像。

现在,一些编排引擎,如 Docker Swarm(或用于开发目的的 Docker Compose)容器内执行运行状况检查。然而不幸的是,生成的 Spring Boot Docker 镜像没有任何类似curlwget安装的健康检查工具,所以类似

version: '3.7'

services:
  springBootApp:
    image: my/springboot/docker-image
    healthcheck:
      test: ["CMD-SHELL", "curl http://localhost:8080/actuator/health"]
       
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml将会失败。(我检查了执行器本身工作正常)

我知道这curl并不wget理想。我实际上希望 Paketo Builder 能够选择像Health Checker BuildPack这样的东西。

有没有办法配置我的bootBuildImageGradle 任务以包含该(或类似的)附加 BuildPack?

如上所述,我正在寻找一种易于维护的解决方案,并且不想编写自己的解决方案Dockerfile以便能够从 Paketo 提供的所有最佳实践中获益。

docker spring-boot docker-compose health-check paketo

3
推荐指数
1
解决办法
1679
查看次数