我正在尝试使用 karatelabs/karate-chrome 图像将我的空手道项目部署到容器中:
在我的 POM.XML 中,我有:Java 21、Karate 1.4.1、Maven 3.6.0
我的 Dockerfile(调用 karate_runner.sh)
FROM karatelabs/karate-chrome
# maven:3.9.6-eclipse-temurin-21-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
#COPY settings.xml /usr/share/maven/ref/
COPY pom.xml /tmp/pom.xml
COPY . /usr/src/app
RUN ["chmod", "+x", "/usr/src/app/maven_runner.sh"]
RUN ulimit -c -l
RUN mvn -B -f /tmp/pom.xml -s /usr/share/maven/ref/settings-docker.xml prepare-package -DskipTests
#Execute shell script from the docker file! This shell script will invoke karate parallel runner class
CMD ["sh","/usr/src/app/karate_runner.sh"]
Karate_runner.sh 文件
根据https://github.com/karatelabs/karate/blob/master/build-docker.sh
我遇到了以下问题。
如果您能指导我如何解决这些问题,那就太好了。
几杯茶之后,我意识到我实际上可以使用普通的 JDK 21 映像并手动安装本地使用的相同版本的 maven。使用此图像,我现在可以成功运行我的并行运行器类。
Dockerfile
# FROM syntax indicates type of docker image we will use.
FROM openjdk:21-jdk
# Install maven
ARG MAVEN_VERSION=3.9.8
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
&& curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
&& rm -f /tmp/apache-maven.tar.gz \
&& ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
ENV MAVEN_HOME=/usr/share/maven
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY pom.xml /tmp/pom.xml
# Copy an entire project into /usr/src/app
COPY . /usr/src/app
#This is to provide maven_runner.sh with executable permission
RUN ["chmod", "+x", "/usr/src/app/maven_runner.sh"]
RUN ulimit -c -l
# Instruct Maven to download all dependencies in advance
RUN mvn -B -f /tmp/pom.xml prepare-package -DskipTests
# This CMD - command part will be executed upon Docker Run command
CMD ["sh","/usr/src/app/maven_runner.sh"]