Как исправить ошибку «не удалось подключиться к localhost: 8080 во время нагрузочного тестирования jmeter с использованием docker-compose» - PullRequest
1 голос
/ 03 апреля 2019

У меня есть файл 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 !!!

...