Как ограничить скорость загрузки из контейнера docker?
Мне нужно предотвратить длительную многотерабайтную загрузку от поглощения всей пропускной способности моей сети, но я могу только ограничить ее использование пропускной способности на уровне процесса (это означает, что замедление сетевого интерфейса всей машины или замедление сетевого трафика этого пользователя не будет работать). К счастью, загрузки в контейнерах с Docker. Что я могу сделать, чтобы замедлить исходящий трафик докер контейнер?
1 ответов
спасибо этот вопрос я понял, что вы можете запустить tc qdisc add dev eth0 root tbf rate 1mbit latency 50ms burst 10000
в контейнере, чтобы установить его скорость загрузки до 1 мегабит / С.
вот пример Dockerfile, который демонстрирует это, генерируя случайный файл и загружая его в / dev / null-as-a-service при приблизительной скорости загрузки 25 КБ/с:
FROM ubuntu
# install dependencies
RUN apt-get update
RUN apt-get install -y iproute curl
# create a large random file to upload
RUN head -c 2M </dev/urandom > /upload.data
# rate-limit the network interface and
# upload the data when docker image is run
RUN echo "#!/bin/bash" >> /upload.sh
RUN echo "tc qdisc add dev eth0 root tbf rate 25kbps latency 50ms burst 2500" >> /upload.sh
RUN echo "curl -d @/upload.data http://devnull-as-a-service.com/dev/null" >> /upload.sh
RUN chmod a+x /upload.sh
ENTRYPOINT exec /upload.sh
предполагая, что у вас есть этот Dockerfile внутри каталога с именем ratelimit
это в вашем текущем рабочем каталоге, вы можете запустить его с:
docker build ratelimit -t ratelimit && docker run --cap-add=NET_ADMIN ratelimit
параметр --cap-add=NET_ADMIN
дает контейнеру разрешение на изменение сетевого интерфейса. Вы можете найти документацию здесь.
Dockerfile сначала устанавливает необходимые зависимости. iproute
предоставляет и curl
позволяет сделать запрос, что мы-лимита. После установки наших зависимостей мы генерируем случайный файл 2MB для загрузки. Следующий раздел создает файл сценария, который будет настройте ограничение скорости и начните загрузку. Наконец, мы указываем этот сценарий как действие, которое необходимо выполнить при запуске контейнера.
этот контейнер добавляет фильтр ковша маркера к сетевому интерфейсу, чтобы замедлить соединение до 25 КБ/ с. Документация параметров, предоставленных фильтру Token Bucker, может быть найдена здесь.
этот файл Dockerfile может быть изменен для выполнения любой другой сетевой задачи путем удаления вызова cURL и выполнения загрузки на своем месте (после установки любых инструментов, необходимых для загрузки, конечно).