https://github.com/lukaszlach/docker-tc
This is probably the way to go
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.
Rules:
Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.
No spam posting.
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.
Don't duplicate the full text of your blog or github here. Just post the link for folks to click.
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
No trolling.
Resources:
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
https://github.com/lukaszlach/docker-tc
This is probably the way to go
thx. If I read it correctly, you can set a bandwidth limit to a container, e.g. busybox. Can you prioritize as well?
I don't know. This docker allows you to use the standard Linux command tc on a docker container. Perhaps check to see if tc allows you to prioritize traffic like you. This isbgenerall called "quality of service". That search term may help as well.
This would be done in your routers QoS settings using the port to select traffic most likely, or if running the containers in macvlan networking mode, by IP.
Cgroups have the ability to limit TCP and total network bandwidth. I don't know from the top of my mind whether this can be configured at runtime (I.e. via docker run), but you can specifcy at runtime the cgroup parent to use. This means you can pre-create the cgroup, set the limits and start the container with that parent cgroup.
You can also run some hook script after launch that adds the PID to a cgroup every time the container is launched, or possibly use tc.
I am not aware of the ability to only limit uplink bandwidth, but I have not researched this.
thx. docker-tc as suggested below does probably this. I'd like to prioritize, not only limiting.
Yeah ultimately every container has it's own veth interface, so you can do shaping using tc on those.
Edit: I had a look at docker-tc. It does what you want, BUT. Unless your use case is complex, I would really think twice about running a tool written in bash which has access to the docker socket (I.e. trivial node escape) and runs with NET_ADMIN capability.
That's a lot of power to do something you can also do with a few lines of code executed after you start the container. Again, provided that your use case is not complex.