diff --git a/libnetwork/README.md b/libnetwork/README.md index cebf96af25..3f10a0311c 100644 --- a/libnetwork/README.md +++ b/libnetwork/README.md @@ -15,6 +15,11 @@ There are many networking solutions available to suit a broad range of use-cases ```go +func main() { + if reexec.Init() { + return + } + // Select and configure the network driver networkType := "bridge" @@ -24,14 +29,14 @@ There are many networking solutions available to suit a broad range of use-cases genericOption[netlabel.GenericData] = driverOptions controller, err := libnetwork.New(config.OptionDriverConfig(networkType, genericOption)) if err != nil { - return + 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 { - return + log.Fatalf("controller.NewNetwork: %s", err) } // For each new container: allocate IP and interfaces. The returned network @@ -40,7 +45,7 @@ There are many networking solutions available to suit a broad range of use-cases // from the returned endpoint. ep, err := network.CreateEndpoint("Endpoint1") if err != nil { - return + log.Fatalf("network.CreateEndpoint: %s", err) } // Create the sandbox for the container. @@ -48,22 +53,29 @@ There are many networking solutions available to suit a broad range of use-cases 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 { - return + log.Fatalf("ep.Join: %s", err) } // libnetwork client can check the endpoint's operational data via the Info() API epInfo, err := ep.DriverInfo() - mapData, ok := epInfo[netlabel.PortMap] - if ok { - portMapping, ok := mapData.([]types.PortBinding) - if ok { - fmt.Printf("Current port mapping for endpoint %s: %v", ep.Name(), portMapping) - } + 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 diff --git a/libnetwork/cmd/readme_test/readme.go b/libnetwork/cmd/readme_test/readme.go index 5e08525ce6..31c258b541 100644 --- a/libnetwork/cmd/readme_test/readme.go +++ b/libnetwork/cmd/readme_test/readme.go @@ -2,15 +2,20 @@ package main import ( "fmt" + "log" + "github.com/docker/docker/pkg/reexec" "github.com/docker/libnetwork" "github.com/docker/libnetwork/config" "github.com/docker/libnetwork/netlabel" "github.com/docker/libnetwork/options" - "github.com/docker/libnetwork/types" ) func main() { + if reexec.Init() { + return + } + // Select and configure the network driver networkType := "bridge" @@ -20,14 +25,14 @@ func main() { genericOption[netlabel.GenericData] = driverOptions controller, err := libnetwork.New(config.OptionDriverConfig(networkType, genericOption)) if err != nil { - return + 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 { - return + log.Fatalf("controller.NewNetwork: %s", err) } // For each new container: allocate IP and interfaces. The returned network @@ -36,28 +41,34 @@ func main() { // from the returned endpoint. ep, err := network.CreateEndpoint("Endpoint1") if err != nil { - return + log.Fatalf("network.CreateEndpoint: %s", err) } - // Create the sandbox for the containr. + // 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. - // Join accepts Variadic arguments which libnetwork and Drivers can use. err = ep.Join(sbx) if err != nil { - return + log.Fatalf("ep.Join: %s", err) } // libnetwork client can check the endpoint's operational data via the Info() API epInfo, err := ep.DriverInfo() - mapData, ok := epInfo[netlabel.PortMap] - if ok { - portMapping, ok := mapData.([]types.PortBinding) - if ok { - fmt.Printf("Current port mapping for endpoint %s: %v", ep.Name(), portMapping) - } + 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()) }