I have below docker-compose file
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"
my slave Jmeter docker file looks like this:
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
and my master looks like this
FROM basejmeter:latest
# Ports to be exposed from the container for JMeter Master
EXPOSE 60000
now I wrote this small shell script for testing Jmeter using Non-GUI command line. but for somereason my jmeter output xml shows
rm="Non HTTP response message: Connect to localhost:8080 [localhost/127.0.0.1] failed: Connection refused (Connection refused)"
Anyone has any idea what's and why i'm getting this error? however grafana, jmxtrans and tomcat works perfectly fine.
Shellscript looks like this and this is modified script to address the issue here:
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
The scripts and evrything works, only problem is JMeter throwing me under the bus saying can't connect thru localhost. I tried normal docker with scaling slave upto 5, then tried to connect these using master container. It works fine but for some reason docker-compose shows me otherwise. Anyhelp !!!