Jana Radhakrishnan d82e80e221 Merge pull request #1206 from jimmycmh/master 9 rokov pred
..
Godeps b39f13f80e Update vishvananda/netlink 734d02c 9 rokov pred
api bd74df7b41 Dnet agent mode support and IT 9 rokov pred
bitseq 216def1e1b Merge pull request #1120 from mrjana/store 9 rokov pred
client bd74df7b41 Dnet agent mode support and IT 9 rokov pred
cluster c4d5bbad7a Use controller methods for handling the encyrption keys from agent 9 rokov pred
cmd b2b87577d4 Add support for encrypting gossip traffic 9 rokov pred
config 055c5dd496 Add network restore to support docker live restore container 9 rokov pred
datastore d82e80e221 Merge pull request #1206 from jimmycmh/master 9 rokov pred
discoverapi 8ded762a0b Update key handling logic to process keyring with 3 keys 9 rokov pred
docs 500a255181 Fixed missing v6 enable flag in macvlan doc 9 rokov pred
driverapi 6fb69f0816 Add driver api enhancements for gossip 9 rokov pred
drivers 117131c41b Gracefully handle missing xfrm modules 9 rokov pred
drvregistry 651f6ea0fa Avoid persisting ipam data if it can be reconstructed 9 rokov pred
etchosts 82f3d55fa4 Fix out of bound slice access in Delete() 9 rokov pred
hostdiscovery 421a3ec5d7 Use gofmt with -s instead of goimports 9 rokov pred
idm 67596cc84c Fix some typos. 9 rokov pred
ipam a9c9765b33 IPAM allocator to not accept a datastore update if already present 9 rokov pred
ipamapi 651f6ea0fa Avoid persisting ipam data if it can be reconstructed 9 rokov pred
ipams 651f6ea0fa Avoid persisting ipam data if it can be reconstructed 9 rokov pred
ipamutils 24d11b1533 Fix cross compilation issues 9 rokov pred
iptables 52da8bda47 modprobe when needed 9 rokov pred
ipvs d2cc81c023 Make sure to close nshandle in ipvs.New 9 rokov pred
netlabel c0162f53a6 Add overlay manager driver 9 rokov pred
netutils 6d3fa9e0f2 Migrate libnetwork to use netlink.Handle 9 rokov pred
networkdb 929921a640 Add debugs for key change events in networkdb 9 rokov pred
ns 117131c41b Gracefully handle missing xfrm modules 9 rokov pred
options cc02894a50 Move test specific functions to a testutils package. 10 rokov pred
osl 382aefbeb5 Merge pull request #1279 from BSWANG/master 9 rokov pred
portallocator cc02894a50 Move test specific functions to a testutils package. 10 rokov pred
portmapper 421a3ec5d7 Use gofmt with -s instead of goimports 9 rokov pred
resolvconf b0d046a1af Remove all netlink/osl deps from ipam/ipamutils 9 rokov pred
test 9054ac2b48 Provide a way for libnetwork to make use of Agent mode functionalities 9 rokov pred
testutils 6d3fa9e0f2 Migrate libnetwork to use netlink.Handle 9 rokov pred
types b2b87577d4 Add support for encrypting gossip traffic 9 rokov pred
.dockerignore b67e986b75 Multi-Arch Support 9 rokov pred
.gitignore 21219731d3 IPAM to run consistency check over its bitmasks 9 rokov pred
CHANGELOG.md 22422dad64 Changelog for 0.8.0-dev.2 9 rokov pred
Dockerfile.build 87e023dfc2 Switch to golang 1.5.4 9 rokov pred
LICENSE d7c688f0f6 Initial commit 10 rokov pred
MAINTAINERS fb4e5ff417 Chen Chun as libnetwork maintainer 9 rokov pred
Makefile 77abea9c1e Use protobuf in networkdb core messages 9 rokov pred
README.md 7d7b9f2405 Add support to accepting arbitrary network ID 9 rokov pred
ROADMAP.md de588f950d fix typos 9 rokov pred
Vagrantfile 04126b850a Fixed Vagrantfile to use systemd script 9 rokov pred
agent.go 8ded762a0b Update key handling logic to process keyring with 3 keys 9 rokov pred
agent.pb.go acac7ee812 Add service alias support 9 rokov pred
agent.proto acac7ee812 Add service alias support 9 rokov pred
circle.yml 034f587706 for fix CI tools/cmd/vet has been deleted 9 rokov pred
controller.go 8ded762a0b Update key handling logic to process keyring with 3 keys 9 rokov pred
default_gateway.go a5aeffcb59 Fix when connecting/disconnecting to/from default gw network 9 rokov pred
default_gateway_freebsd.go 71220e2a88 Made use of map[string]string for nw options in default-gateway impl 9 rokov pred
default_gateway_linux.go 7d7b9f2405 Add support to accepting arbitrary network ID 9 rokov pred
default_gateway_solaris.go c7684b5ff7 Get libnetwork to build on Solaris 9 rokov pred
default_gateway_windows.go 71220e2a88 Made use of map[string]string for nw options in default-gateway impl 9 rokov pred
drivers_experimental_linux.go fe56a8d3dc Moving MacVlan driver out of experimental 9 rokov pred
drivers_freebsd.go d565a4df48 Push driver config during `Init` 10 rokov pred
drivers_linux.go fe56a8d3dc Moving MacVlan driver out of experimental 9 rokov pred
drivers_solaris.go c7684b5ff7 Get libnetwork to build on Solaris 9 rokov pred
drivers_stub_linux.go ed9601e4c6 Make macvlan and ipvlan drivers as experimental 9 rokov pred
drivers_windows.go b1c4ec6f05 Renaming driver name to lower case for usability and allowing portmapping to surface 9 rokov pred
endpoint.go 9328f1ea1e Refresh special drivers networks if present in store 9 rokov pred
endpoint_cnt.go 4dde205544 Fixing a possible endpoint_cnt state inconsistency issue 9 rokov pred
endpoint_info.go 055c5dd496 Add network restore to support docker live restore container 9 rokov pred
error.go 9054ac2b48 Provide a way for libnetwork to make use of Agent mode functionalities 9 rokov pred
errors_test.go c70cfcb150 Provide interface to categorize errors 10 rokov pred
libnetwork_internal_test.go 0051e39750 Add support for SRV query in embedded DNS 9 rokov pred
libnetwork_test.go 055c5dd496 Add network restore to support docker live restore container 9 rokov pred
machines 6531b0c4cd Use Docker Machine for Test Environments 9 rokov pred
network.go d7d88ce37d Make getSvcRecords() more robust 9 rokov pred
resolver.go 54f694c913 For cached connections ignore late replies after read timeout 9 rokov pred
resolver_unix.go 055c5dd496 Add network restore to support docker live restore container 9 rokov pred
resolver_windows.go 61510dc222 Move the iptables setup for embedded DNS into a reexec process 9 rokov pred
sandbox.go d5ce149555 Do not add loadbalancer to unpopulated sandboxes 9 rokov pred
sandbox_dns_unix.go 96cc604cf1 Setup external DNS servers after daemon restart with live-restore 9 rokov pred
sandbox_dns_windows.go 96cc604cf1 Setup external DNS servers after daemon restart with live-restore 9 rokov pred
sandbox_externalkey.go ffbe62a8f7 sandbox_externalkey.go: split for cross compilation 9 rokov pred
sandbox_externalkey_solaris.go c7684b5ff7 Get libnetwork to build on Solaris 9 rokov pred
sandbox_externalkey_unix.go 880d0ada95 Fix netns path setting from hook 9 rokov pred
sandbox_externalkey_windows.go 880d0ada95 Fix netns path setting from hook 9 rokov pred
sandbox_store.go d5ce149555 Do not add loadbalancer to unpopulated sandboxes 9 rokov pred
sandbox_test.go bc6203bd0a Do not allow network creation if datastore is missing 9 rokov pred
service.go 0f89c9b7bc Add ingress load balancer 9 rokov pred
service_linux.go ad35d257ff Match only locally destined requests for ingress 9 rokov pred
service_unsupported.go acac7ee812 Add service alias support 9 rokov pred
store.go 9328f1ea1e Refresh special drivers networks if present in store 9 rokov pred
store_test.go 6d3fa9e0f2 Migrate libnetwork to use netlink.Handle 9 rokov pred
wrapmake.sh ddfa448536 Allow tests to be interrupted 10 rokov pred

README.md

libnetwork - networking for containers

Circle CI Coverage Status GoDoc

Libnetwork provides a native Go implementation for connecting containers

The goal of libnetwork is to deliver a robust Container Network Model that provides a consistent programming interface and the required network abstractions for applications.

Design

Please refer to the design for more information.

Using libnetwork

There are many networking solutions available to suit a broad range of use-cases. libnetwork uses a driver / plugin model to support all of these solutions while abstracting the complexity of the driver implementations by exposing a simple and consistent Network Model to users.

func main() {
	if reexec.Init() {
		return
	}

	// Select and configure the network driver
	networkType := "bridge"

	// Create a new controller instance
	driverOptions := options.Generic{}
	genericOption := make(map[string]interface{})
	genericOption[netlabel.GenericData] = driverOptions
	controller, err := libnetwork.New(config.OptionDriverConfig(networkType, genericOption))
	if err != nil {
		log.Fatalf("libnetwork.New: %s", err)
	}

	// Create a network for containers to join.
	// NewNetwork accepts Variadic optional arguments that libnetwork and Drivers can use.
	network, err := controller.NewNetwork(networkType, "network1", "")
	if err != nil {
		log.Fatalf("controller.NewNetwork: %s", err)
	}

	// For each new container: allocate IP and interfaces. The returned network
	// settings will be used for container infos (inspect and such), as well as
	// iptables rules for port publishing. This info is contained or accessible
	// from the returned endpoint.
	ep, err := network.CreateEndpoint("Endpoint1")
	if err != nil {
		log.Fatalf("network.CreateEndpoint: %s", err)
	}

	// Create the sandbox for the container.
	// NewSandbox accepts Variadic optional arguments which libnetwork can use.
	sbx, err := controller.NewSandbox("container1",
		libnetwork.OptionHostname("test"),
		libnetwork.OptionDomainname("docker.io"))
	if err != nil {
		log.Fatalf("controller.NewSandbox: %s", err)
	}

	// A sandbox can join the endpoint via the join api.
	err = ep.Join(sbx)
	if err != nil {
		log.Fatalf("ep.Join: %s", err)
	}

	// libnetwork client can check the endpoint's operational data via the Info() API
	epInfo, err := ep.DriverInfo()
	if err != nil {
		log.Fatalf("ep.DriverInfo: %s", err)
	}

	macAddress, ok := epInfo[netlabel.MacAddress]
	if !ok {
		log.Fatalf("failed to get mac address from endpoint info")
	}

	fmt.Printf("Joined endpoint %s (%s) to sandbox %s (%s)\n", ep.Name(), macAddress, sbx.ContainerID(), sbx.Key())
}

Future

Please refer to roadmap for more information.

Contributing

Want to hack on libnetwork? Docker's contributions guidelines apply.

Copyright and license

Code and documentation copyright 2015 Docker, inc. Code released under the Apache 2.0 license. Docs released under Creative commons.