Cory Snider 5b3acc15d1 libnetwork: drop legacy driver cruft 2 年之前
..
bitmap 564a13285f libnetwork/bitmap: improve documentation 2 年之前
cluster 0f6cb61f2d Switch from x/net/context -> context 7 年之前
cmd 332ffe8d74 libnetwork/networkdb: NetworkDB.Watch(): remove unused "key" argument 2 年之前
config cda187222e libnetwork/config: remove options that were only used in tests 2 年之前
datastore 4c4149a09c libnetwork/internal/kvstore: remove unused Delete() 2 年之前
diagnostic 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
discoverapi a08a254df3 libnetwork: drop DatastoreConfig discovery type 2 年之前
docs 9e817251a8 libnetwork/docs: fix broken link 2 年之前
driverapi 5b3acc15d1 libnetwork: drop legacy driver cruft 2 年之前
drivers 5b3acc15d1 libnetwork: drop legacy driver cruft 2 年之前
drvregistry 5b3acc15d1 libnetwork: drop legacy driver cruft 2 年之前
etchosts 1cd937a867 libnetwork/etchosts: format code with gofumpt 2 年之前
internal 4c4149a09c libnetwork/internal/kvstore: remove unused Delete() 2 年之前
ipam 6f3fcbcfe1 libnetwork/ipam(s): format code with gofumpt 2 年之前
ipamapi 5b3acc15d1 libnetwork: drop legacy driver cruft 2 年之前
ipams 5b3acc15d1 libnetwork: drop legacy driver cruft 2 年之前
ipamutils bba21735bf libnetwork/ipamutils: format code with gofumpt 2 年之前
ipbits 3c59ef247f libnet/ipam: use netip types internally 2 年之前
iptables fffcbdae4c libnetwork/iptables: format code with gofumpt 2 年之前
netlabel 644e3d4cdb libnetwork/netlabel: remove dead code 2 年之前
netutils 65e2149b3e libnetwork/netutils: format code with gofumpt 2 年之前
networkdb 332ffe8d74 libnetwork/networkdb: NetworkDB.Watch(): remove unused "key" argument 2 年之前
ns 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
options 6187ada21f libnetwork/options: format code with gofumpt 2 年之前
osl 882f7bbf1f libnetwork/osl: format code with gofumpt 2 年之前
portallocator 801cd50744 libnetwork/portallocator: format code with gofumpt 2 年之前
portmapper dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
resolvconf 0b75c02276 libnetwork/resolvconf: format code with gofumpt 2 年之前
support 4b981436fe Fixup libnetwork lint errors 4 年之前
testutils ecbd126d6a Merge pull request #45586 from corhere/fix-flaky-resolver-test 2 年之前
types dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
.dockerignore 62ebaeac7a Added back dockerignore 7 年之前
.gitignore 62ebaeac7a Added back dockerignore 7 年之前
README.md 17882ed614 libnetwork: update example in README.md 2 年之前
agent.go 332ffe8d74 libnetwork/networkdb: NetworkDB.Watch(): remove unused "key" argument 2 年之前
agent.pb.go fd72b134d5 update generated files 2 年之前
agent.proto 1eaea43581 fix protos and "go generate" commands 2 年之前
controller.go 1980deffae libn: refactor platform driver registration 2 年之前
default_gateway.go 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
default_gateway_freebsd.go f96b9bf761 libnetwork: return concrete-typed *Controller 2 年之前
default_gateway_linux.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
default_gateway_windows.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
drivers_freebsd.go d519bde5da libnet/drivers: stop passing config to drivers... 2 年之前
drivers_ipam.go d478e13639 libnet: un-plumb datastores from IPAM inits 2 年之前
drivers_linux.go d519bde5da libnet/drivers: stop passing config to drivers... 2 年之前
drivers_unsupported.go 1980deffae libn: refactor platform driver registration 2 年之前
drivers_windows.go d519bde5da libnet/drivers: stop passing config to drivers... 2 年之前
endpoint.go 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
endpoint_cnt.go befff0e13f libnetwork: remove more datastore scope plumbing 2 年之前
endpoint_info.go c71555f030 libnetwork: return concrete-typed *Endpoint 2 年之前
endpoint_info_unix.go ab35df454d remove pre-go1.17 build-tags 2 年之前
endpoint_info_windows.go ab35df454d remove pre-go1.17 build-tags 2 年之前
endpoint_test.go ab35df454d remove pre-go1.17 build-tags 2 年之前
error.go befff0e13f libnetwork: remove more datastore scope plumbing 2 年之前
errors_test.go cd381aea56 libnetwork: fix empty-lines (revive) 2 年之前
firewall_linux.go 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
firewall_linux_test.go ffd75c2e0c libnetwork: Support IPv6 in arrangeUserFilterRule() (redux) 2 年之前
firewall_others.go ab35df454d remove pre-go1.17 build-tags 2 年之前
libnetwork_internal_test.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
libnetwork_linux_test.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
libnetwork_test.go cda187222e libnetwork/config: remove options that were only used in tests 2 年之前
libnetwork_unix_test.go ab35df454d remove pre-go1.17 build-tags 2 年之前
libnetwork_windows_test.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
network.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
network_unix.go ab35df454d remove pre-go1.17 build-tags 2 年之前
network_windows.go 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
resolver.go 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
resolver_test.go 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
resolver_unix.go 1178319313 libn: fix resolver restore w/ chatty 'iptables -C' 2 年之前
resolver_windows.go ab35df454d remove pre-go1.17 build-tags 2 年之前
sandbox.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
sandbox_dns_unix.go 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
sandbox_dns_windows.go ab35df454d remove pre-go1.17 build-tags 2 年之前
sandbox_externalkey_unix.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
sandbox_externalkey_unsupported.go ab35df454d remove pre-go1.17 build-tags 2 年之前
sandbox_store.go 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
sandbox_test.go f96b9bf761 libnetwork: return concrete-typed *Controller 2 年之前
service.go 9e3a6ccf69 libn/i/setmatrix: make generic and constructorless 2 年之前
service_common.go 74da6a6363 Switch all logging to use containerd log pkg 2 年之前
service_common_test.go 0e91d2e0e9 libnetwork: return concrete-typed *Sandbox 2 年之前
service_linux.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
service_unsupported.go ab35df454d remove pre-go1.17 build-tags 2 年之前
service_windows.go dd5ea7e996 libnetwork: format code with gofumpt 2 年之前
store.go a3b0181503 libnetwork/datastore: remove Watch(), Watchable(), RestartWatch() 2 年之前
store_linux_test.go ba02bbb3b4 Merge pull request #45886 from thaJeztah/more_grepable 2 年之前
store_test.go ba02bbb3b4 Merge pull request #45886 from thaJeztah/more_grepable 2 年之前

README.md

libnetwork - networking for containers

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.

package main

import (
	"fmt"
	"log"

	"github.com/docker/docker/libnetwork"
	"github.com/docker/docker/libnetwork/config"
	"github.com/docker/docker/libnetwork/netlabel"
	"github.com/docker/docker/libnetwork/options"
)

func main() {
	// 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("example.com"))
	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.Fatal("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())
}

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.