localhost
, вероятно, неправильное имя хоста для использования в вашем контексте. когда вы используете контейнеры, имя хоста должно совпадать с именем контейнера. поэтому используйте имя вашего контейнера вместо localhost
.
использованная литература:
https://github.com/elastic/elasticsearch-py/issues/715
https://docs.locust.io/en/latest/running-locust-docker.html
https://docs.locust.io/en/stable/configuration.html
общее предположение:
locustfile.py
существует в текущем рабочем каталоге
распределенный пример с docker compose:
например, будет работать следующая конфигурация файла docker-compose.yml:
services:
web:
build: .
command: python manage.py runserver 0:8000
volumes:
- .:/code/
ports:
- "8000:8000"
master:
image: locustio/locust
ports:
- "8089:8089"
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile.py --master -H http://web:8000
worker:
image: locustio/locust
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile.py --worker --master-host master
флаг -H (псевдоним для --host) в следующей строке делает уловку:
command: -f /mnt/locust/locustfile.py --master -H http://web:8000
нераспространяемый пример с docker compose:
services:
web:
build: .
command: python manage.py runserver 0:8000
volumes:
- .:/code/
ports:
- "8000:8000"
locust:
image: locustio/locust
ports:
- "8089:8089"
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile.py --host=http://web:8000
вы также можете указать файл конфигурации вместо определения флагов в командной строке. предположим, что файл locust.conf
существует в текущем рабочем каталоге:
locust.conf:
host: http://web:8000
так что в вашем docker-compose.yml
вы делаете:
command: -f /mnt/locust/locustfile.py --config=/mnt/locust/locust.conf
вместо того:
command: -f /mnt/locust/locustfile.py --host=http://web:8000
нераспространяемый пример без docker compose:
контейнеры должны находиться в одной сети, чтобы они могли связываться друг с другом. для этого создадим общую мостовую сеть с именем locustnw
:
docker network create --driver bridge locustnw
теперь запустите контейнер вашего приложения в этой сети. Предположим, он прослушивает порт 8000 с именем web:
docker run -p 8000:8000 --network=locustnw --name web <my_image>
Теперь запустите свой контейнер с саранчой в той же сети. Предположим, он прослушивает порт 8089:
docker run -p 8089:8089 --network=locustnw -v $PWD:/mnt/locust locustio/locust -f /mnt/locust/locustfile.py --host=http://web:8000
флаги --network
, --name
и --host
- это ключи!
person
victor israe
schedule
03.06.2020