Limit disk size and bandwidth of a Docker container

I don’t think this is possible right now using Docker default settings. Here’s what I would try.

  • About disk usage: You could tell Docker to use the DeviceMapper storage backend instead of AuFS. This way each container would run on a block device (Devicemapper dm-thin target) limited to 10GB (this is a Docker default, luckily enough it matches your requirement!).

    According to this link, it looks like latest versions of Docker now accept advanced storage backend options. Using the devicemapperbackend, you can now change the default container rootfs size option using --storage-opt dm.basesize=20G (that would be applied to any newly created container).

    To change the storage backend: use the --storage-driver=devicemapper Docker option. Note that your previous containers won’t be seen by Docker anymore after the change.

  • About network bandwidth : you could tell Docker to use LXC under the hoods : use the -e lxcoption.

    Then, create your containers with a custom LXC directive to put them into a traffic class :

    docker run --lxc-conf="lxc.cgroup.net_cls.classid = 0x00100001" your/image /bin/stuff

    Check the official documentation about how to apply bandwidth limits to this class.
    I’ve never tried this myself (my setup uses a custom OpenVswitch bridge and VLANs for networking, so bandwidth limitation is different and somewhat easier), but I think you’ll have to create and configure a different class.

Note : the --storage-driver=devicemapperand -e lxcoptions are for the Docker daemon, not for the Docker client you’re using when running docker run ........

Leave a Comment