Public Repository

Last pushed: 2 years ago
Short Description
Container Network Orchestrator
Full Description

Leviathan Container Network Orchestrator Release 0.8.1

Automated network wiring and policy for clusters of distributed Linux containers.


Docker 1.8.1
Docker API version 1.20
WARNING: Your Docker host MUST support Docker API 1.20 or later


This release supports the creation and deletion of reachable container IP networks (CINs) and Ethernet networks (CENs). The APIs and data formats that are supported can be found here:


On all hosts which require networking, you must run an instance of the leviathan container with the following options set:

docker run -v /run:/run -v /var:/host/var -v /proc:/host/proc \
        --net=host --privileged=true -i -t ivanos/leviathan:rel-0.8.1

Requirements for Network Control

All containers that you expect Levaithan to control must be started with the option --net=none. You can read more about that here:

Give it a Try

UNDER CONSTRUCTION version 0.8: Leviathan is under very active development. It is critical that you carefully read the release notes below before using any new version

NEW 0.8:

  • all CINs are "reachable" from host processes; this will settable in 0.9


NOTE: For these examples, <lev_host> is the IP address or DNS name of the host running the Leviathan container.

  1. Start some containers with --net=none option
  2. Grab the container IDs with docker ps and put them in a JSON file like this:
      "cenID" : "cen1",
      "containerIDs" : [ "cc3a8c8","d43a978","4c3fff68","23538ce6"]
  3. Load this file into Leviathan with the following command:
    curl -d @/tmp/cen.json http://<lev_host>:8080/cin
  4. Create the actual networking components on the host machine and inside the containers with this command:
    curl -d '["cen1","cen2"]' http://<lev_host>:8080/cin/prepare
    NOTE: If you watch the console of the leviathan container you'll see all the linux commands which are run and the output of each.
  5. Check the host machine and running containers. The JSON file in this example would create two bridges cen1 and cen2, add two interfaces to container cc3a8c8, attached one interface to each of the two bridges, and create one interface for the other containers adding them to the appropriate bridge. It will assign IP Addresses of the form 10.7.X.Y to cen1 and 10.8.X.Y to cen2
    You can see the bridges and interfaces created on the host by running:
    ip a
    You can see the interfaces created in the containers and their IP Addresses by running:
    docker exec <container id> ip a
  6. Exec into various containers that are members of the same CIN and try to have them ping one another
  7. NEW: Try to ping containers from the host
  8. Remove the networking components from the host machine and running containers:
    curl -d '["cen1","cen2"]' http://<lev_host>:8080/cin/destroy
  9. Clear out Leviathan rendering prepare and destroy as "no ops"
    curl http://<lev_host>:8080/util/clear


latest = rel-0.8.1

There is a visual debugger (dobby_ui) of the internal metadata graph store here that can be accessed at the following URL:

http://<host running the Leviathan container>:8080/static/www/index.html

NOTE: dobby_ui is meant for debugging and not designed for any specific application domains (e.g. Leviathan).

All of the source code that is included in Leviathan containers can be found here:

And please report any issues here:

Thank you for trying Leviathan!

Read the Dockerfile

Docker Pull Command