首页 > 解决方案 > Docker中的Jmeter

问题描述

我正在尝试在 Docker 中运行 Jmeter。我得到了 Dockerfile,Entrypoint 也添加了 entrypoint.sh。

ARG JMETER_VERSION="5.2.1"
RUN mkdir /jmeter
WORKDIR /jmeter
RUN apt-get update \
    && apt-get install wget -y \
    && apt-get install openjdk-8-jdk -y \
    && wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.2.1.tgz \
    && tar -xzf apache-jmeter-5.2.1.tgz \
    && rm apache-jmeter-5.2.1.tgz
ENV JAVA_HOME  /usr/lib/jvm/java-8-openjdk-amd64
RUN export JAVA_HOME
RUN echo $JAVA_HOME
ENV JMETER jmeter/apache-jmeter-5.2.1/bin
ENV PATH $PATH:$JMETER_BIN
RUN export JMETER
RUN echo $JMETER
WORKDIR /jmeter/apache-jmeter-5.2.1
COPY users.jmx /jmeter/apache-jmeter-5.2.1
COPY entrypoint.sh /jmeter/apache-jmeter-5.2.1
RUN ["chmod", "+x", "entrypoint.sh"]
ENTRYPOINT ["./entrypoint.sh"]

入口点.sh

#!/bin/bash
# Inspired from https://github.com/hhcordero/docker-jmeter-client
# Basically runs jmeter, assuming the PATH is set to point to JMeter bin-dir (see Dockerfile)
#
# This script expects the standdard JMeter command parameters.
#
set -e
freeMem=`awk '/MemFree/ { print int($2/1024) }' /proc/meminfo`
s=$(($freeMem/10*8))
x=$(($freeMem/10*8))
n=$(($freeMem/10*2))
export JVM_ARGS="-Xmn${n}m -Xms${s}m -Xmx${x}m"

echo "START Running Jmeter on `date`"
echo "JVM_ARGS=${JVM_ARGS}"
echo "jmeter args=$@"

# Keep entrypoint simple: we must pass the standard JMeter arguments
bin/jmeter.sh $@
echo "END Running Jmeter on `date`"

现在,当我尝试在没有 jmeter 参数的情况下运行容器时,容器会启动并询问 jmeter 参数

docker run sar/test12

我收到错误发生错误:未设置 X11 DISPLAY 变量,但该程序执行了需要它的操作。

但是当我使用参数运行 jmeter 容器时 docker run -v /home/jmeter/unbuntjmeter/:/jmeter/apache-jmeter-5.2.1 sar/test12 -n -t ./users.jmx

docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:”./entrypoint.sh“:权限被拒绝”:未知。

标签: dockerjmeter

解决方案


解决方案

对于 X11 问题,您可以尝试-e DISPLAY=$DISPLAY在您的中进行设置docker run,您可能需要执行一些其他步骤才能使其正常工作,具体取决于您的主机设置方式。但是试图让 GUI 在这里工作似乎有点过头了。要在传递命令参数时解决问题,您可以:

  • entrypoint.sh通过运行在您的主机上为文件添加执行权限chmod +x /home/jmeter/unbuntjmeter/entrypoint.sh

或者

  • 不要通过从命令中删除参数来安装/home/jmeter/unbuntjmeter/到容器中。-vdocker run

问题

当您运行此命令时,您将主机上docker run -v /home/jmeter/unbuntjmeter/:/jmeter/apache-jmeter-5.2.1 sar/test12 -n -t ./users.jmx的目录挂载到您的 docker 容器中。/home/jmeter/unbuntjmeter//jmeter/apache-jmeter-5.2.1

这意味着/jmeter/apache-jmeter-5.2.1/entrypoint.sh容器中的脚本被主机上该目录中的脚本覆盖(如果有的话,似乎确实存在)。你主机上的这个文件没有在你的容器中执行的适当权限(大概它只是需要+x,因为你在你的构建中运行它:) RUN ["chmod", "+x", "entrypoint.sh"]


推荐阅读