1

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 !!!

change198
  • 1,647
  • 3
  • 21
  • 60

0 Answers0