Internet speed prioritization in containers
How can I prioritize a container with regards to internet speed? Let’s assume I’ve got two podman (docker) containers and both upload stuff.
Reasoning
My upload bandwidth is limited. One container needs to reliably upload stuff and the other doesn’t. Thus, I want to prioritize one container over the over in order to deliver content in this container reliably.
Example
Syncthing can sync over a long time period but jellyfin can’t.
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.
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.
deleted by creator