我正在使用部署到 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
我正在开发一个 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) 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)
更多上下文
题
我知道应该能够在信任存储中安装 zscaler 根证书,但不清楚哪个信任存储?(以及文件系统上的哪个位置?)
我不清楚为什么'spring cloud download'失败,但其他下载成功,即这次下载成功:
2021-03-01T08:40:34.790-0600 [QUIET] …Run Code Online (Sandbox Code Playgroud) 我的 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
我更新了我的 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 实现相同的目标?
将 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 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 add、yum、apt-get等轻松安装这些软件包
但是https://github.com/paketo-buildpacks/spring-boot和https://github.com/paketo-buildpacks/bellsoft-liberica没有安装其他软件包的选项。
是否有构建包(或配置选项)可以构建具有字体支持的 Docker 映像?
我正在使用 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。
我想知道是否有更好,更优雅的解决方案。
我们希望以最简单的方式使用Paketo.io / CloudNativeBuildpacks (CNB) GitLab CI 。我们的 GitLab 设置使用 AWS EKS 集群,其中包含利用Kubernetes 执行器的非特权 GitLab CI 运行器。我们也不想在构建中使用 Docker带来安全风险。所以我们没有/var/run/docker.sock暴露我们的主机\xe2\x80\x99s,也不想使用docker:dind.
我们找到了一些有关如何将 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代码中类似:
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) 我正在使用 Spring Boot 内置的 Gradle:bootBuildImage任务构建我的 Docker 映像,这非常方便,因为我不必维护自己的Dockerfile.
Gradle 任务在底层使用Paketo Bionic Base Stack ,并且可以很好地构建分层的 Docker 镜像。
现在,一些编排引擎,如 Docker Swarm(或用于开发目的的 Docker Compose)在容器内执行运行状况检查。然而不幸的是,生成的 Spring Boot Docker 镜像没有任何类似curl或wget安装的健康检查工具,所以类似
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 提供的所有最佳实践中获益。
paketo ×10
buildpack ×7
spring-boot ×6
docker ×5
spring ×2
gitlab ×1
gitlab-ci ×1
health-check ×1
java-font ×1
kubernetes ×1
zscaler ×1