У меня есть файл docker-compose
version: '3.7'
services:
tomcat:
build:
context: .
dockerfile: Dockerfile
container_name: tomcat
ports:
- "8080:8080"
- "9910:9910"
healthcheck:
test: ["CMD", "/healthcheck.sh"]
interval: 1m
timeout: 10s
retries: 3
start_period: 1m
environment:
JAVA_OPTS: "-Xms1g -Xmx1g -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9910
-Dcom.sun.management.jmxremote.rmi.port=9910
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=localhost"
jmxtrans:
build:
context: .
dockerfile: Dockerfile.jmxtrans
container_name: jmxtrans
environment:
JMX_HOST: localhost
JMX_PORT: 9910
STATSD_HOST: dashboard
STATSD_PORT: 8125
links:
- tomcat
- dashboard
dashboard:
image: kamon/grafana_graphite
container_name: dashboard
ports:
- "80:80"
- "81:81"
- "8125:8125/udp"
- "8126:8126"
master:
build:
context: .
dockerfile: JMeter/apache-jmeter-master/Dockerfile
container_name: master
tty: true
ports:
- "60000"
slave:
build:
context: .
dockerfile: JMeter/apache-jmeter-slave/Dockerfile
tty: true
ports:
- "50000"
- "1099"
мой вспомогательный файл док-станции Jmeter выглядит следующим образом:
FROM basejmeter:latest
# Ports to be exposed from the container for JMeter Slaves/Server
EXPOSE 1099 50000
# Application to run on starting the container
# to avoid key store error rmi_keystore.jks not found added Jserver.rmi.ssl.disable=true
ENTRYPOINT $JMETER_HOME/bin/jmeter-server \
-Dserver.rmi.localport=50000 \
-Dserver_port=1099 \
-Jserver.rmi.ssl.disable=true
и мой мастер выглядит так
FROM basejmeter:latest
# Ports to be exposed from the container for JMeter Master
EXPOSE 60000
Теперь я написал этот небольшой скрипт для тестирования Jmeter с использованием командной строки без графического интерфейса.но по какой-то причине мой вывод в формате jmeter xml показывает
rm = "Ответное сообщение не HTTP: Соединение с localhost: 8080 [localhost / 127.0.0.1] не удалось: соединение отклонено (соединение отклонено)"
Кто-нибудь знает, что и почему я получаю эту ошибку?однако графана, jmxtrans и tomcat отлично работают.
Shellscript выглядит следующим образом, и это модифицированный скрипт для решения проблемы здесь:
docker build -t basejmeter -f JMeter/Dockerfile .
docker-compose build --no-cache && docker-compose up -d --scale slave=5
get_slave_IP=$(docker inspect -f '{{.Name}} {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) | grep slave | awk -F' ' '{print $2}' | tr '\n' ',' | sed 's/.$//')
get_master_IP=$(docker inspect -f '{{.Name}} {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) | grep master | awk -F' ' '{print $2}' | tr '\n' ',' | sed 's/.$//')
get_master_port_details=$(docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $(docker ps -f "name=master" -aq))
get_master_port=$(echo "${get_master_port_details%/*}" | tr -d [:blank:])
working_dir=$(docker exec -it -w /jmeter/apache-jmeter-5.1.1/ master pwd | tr -d '\r')
for file_name_with_path in ./JMeter/JMXTest/*.jmx
do
echo $file_name_with_path
file_name=$(basename $file_name_with_path)
file_name="${file_name##*/}"
name="${file_name%.*}"
echo $file_name
echo $name
eval "docker cp ${file_name_with_path} master:${working_dir}/"
eval "docker exec -it master /bin/bash -c 'mkdir -p $working_dir/$name &&
cd $working_dir/$name &&
$working_dir/bin/jmeter -n -t \
$working_dir/$file_name -R$get_slave_IP \
-j ./$name.log \
-l ./$name.xml \
-Jjmeter.save.saveservice.output_format=xml \
-Jjmeter.save.saveservice.response_data=true \
-Jjmeter.save.saveservice.samplerData=true \
-Jserver.rmi.ssl.disable=true \
-JnumberOfThreads=1 \
-Djava.rmi.server.hostname=${get_master_IP} \
-Dclient.rmi.localport=60000' "
eval "docker cp master:$working_dir/$name ./JMeter/Results/"
done
Сценарии и все работает, единственная проблема заключается в том, что JMeter бросает меня под шину, говоря, что не может подключитьсячерез localhost.Я попробовал обычный докер с масштабированием slave до 5, затем попытался соединить их, используя главный контейнер.Это работает нормально, но по какой-то причине docker-compose показывает мне иначе.Anyhelp !!!