docker - 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“:权限被拒绝”:未知。
解决方案
解决方案
对于 X11 问题,您可以尝试-e DISPLAY=$DISPLAY
在您的中进行设置docker run
,您可能需要执行一些其他步骤才能使其正常工作,具体取决于您的主机设置方式。但是试图让 GUI 在这里工作似乎有点过头了。要在传递命令参数时解决问题,您可以:
entrypoint.sh
通过运行在您的主机上为文件添加执行权限chmod +x /home/jmeter/unbuntjmeter/entrypoint.sh
。
或者
- 不要通过从命令中删除参数来安装
/home/jmeter/unbuntjmeter/
到容器中。-v
docker 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"]
。
推荐阅读
- angular - Angular 6:调用订阅方法时视图未更新
- c# - 区分来自 2 个独立键盘的输入
- python - 如何正确使用`cv2.putText`在图像上绘制中文文本?(Python+OpenCV)
- angular - Angular Material 5:选择(单击)选项卡时如何调用函数?
- debugging - JMETER 错误:{"errorcode":9999,"errormessage":"JSON 中位置 0 处的意外标记 %"}
- java - Spring MVC 转换器优先于安全方法
- google-sheets - Range.getValue 方法被脚本广泛用于执行提示(菜单中的灯泡)
- extjs - Sencha CMD for EXT JS (GPL - 版本)
- django - 按自关系过滤对象
- c++ - 我的 C++ 代码中的 SIGABRT 错误