Bridge between container framework networking and storage models to OpenStack networking and storage abstractions.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Antoni Segura Puimedon cae8019e44
tox: fix coverage call
6 years ago
doc Rephrase "networking basis" in watcher devref 6 years ago
etc Refactoring: Drop all the code except common one 6 years ago
kuryr Add ExportPortFailure exception 6 years ago
releasenotes/notes Use reno for release notes 7 years ago
tools tox: Install like other OpenStack projects 6 years ago
usr/libexec/kuryr Merge "Add support for VIF_TYPE_TAP" 6 years ago
.coveragerc tox: fix coverage call 6 years ago
.gitignore Allow for user specified local.conf changes with Vagrant 7 years ago
.gitreview Added .gitreview 7 years ago
.testr.conf Separate unit tests from fullstack tests 7 years ago
CONTRIBUTING.rst Initial template commit 7 years ago
HACKING.rst Initial template commit 7 years ago
LICENSE Initial template commit 7 years ago Remove '' 7 years ago
README.rst Update kuryr developer readme 6 years ago Add entrypoint of Kuryr 7 years ago
babel.cfg Initial template commit 7 years ago
requirements.txt move to ipaddress 6 years ago
setup.cfg wheel: build universal wheels 6 years ago Updated from global requirements 7 years ago
test-requirements.txt Remove unused docker-py in test-requirements.txt 6 years ago
tox.ini tox: fix coverage call 6 years ago



Kuryr mascot

Docker for OpenStack Neutron

Kuryr is a Docker network plugin that uses Neutron to provide networking services to Docker containers. It provides containerised images for the common Neutron plugins.


  • TODO

Getting Code

$ git clone
$ cd kuryr


$ sudo pip install -r requirements.txt

Installing Kuryr's libnetwork driver

For kuryr-libnetwork driver installation refer:

Configuring Kuryr

Generate sample config, etc/kuryr.conf.sample, running the following

$ tox -e genconfig

Rename and copy config file at required path

$ cp etc/kuryr.conf.sample /etc/kuryr/kuryr.conf

Edit keystone section in /etc/kuryr/kuryr.conf, replace ADMIN_PASSWORD:

auth_uri =
admin_user = admin
admin_tenant_name = service
admin_password = ADMIN_PASSWORD

In the same file uncomment the bindir parameter with the path for the Kuryr vif binding executables:

bindir = /usr/local/libexec/kuryr

Running Kuryr

Currently, Kuryr utilizes a bash script to start the service. Make sure that you have installed tox before the execution of the below command.

$ sudo ./scripts/

After the booting, please restart your Docker service, e.g.,

$ sudo service docker restart

The bash script creates the following file if it is missing.

  • /usr/lib/docker/plugins/kuryr/kuryr.json: Json spec file for libnetwork.

Note the root privilege is required for creating and deleting the veth pairs with pyroute2 to run.

Testing Kuryr

For a quick check that Kuryr is working create a network:

$ docker network create --driver kuryr test_net
$ docker network ls
NETWORK ID          NAME                DRIVER
785f8c1b5ae4        test_net            kuryr

To test it with tox:

$ tox

You can also run specific test cases using the -e flag, e.g., to only run the fullstack test case.

$ tox -e fullstack

Generating Documentation

We use Sphinx to maintain the documentation. You can install Sphinx using pip.

$ pip install -U Sphinx

In addition to Sphinx you will also need the following requirements (not covered by requirements.txt):

$ pip install oslosphinx reno 'reno[sphinx]'

The source code of the documentation are under doc, you can generate the html files using the following command. If the generation succeeds,a build/html dir will be created under doc.

$ cd doc
$ make html

Now you can serve the documentation at http://localhost:8080 as a simple website.

$ cd build/html
$ python -m SimpleHTTPServer 8080


To create Docker networks with subnets having same/overlapping cidr, it is expected to pass unique pool name for each such network creation Docker command. Docker cli options -o and --ipam-opt should be used to pass pool names as shown below:

$ sudo docker network create --driver=kuryr --ipam-driver=kuryr \
  --subnet --ip-range \
  -o \ \

Now Docker user creates another network with same cidr as the previous one, i.e, but with different pool name, neutron_pool2:

$ sudo docker network create --driver=kuryr --ipam-driver=kuryr \
  --subnet --ip-range \
  -o \ \