Move Unsupp Network & IP check to the new updateNetworkConfig() func
| ... | ... |
@@ -658,6 +658,9 @@ func hasUserDefinedIPAddress(epConfig *networktypes.EndpointSettings) bool {
|
| 658 | 658 |
|
| 659 | 659 |
// User specified ip address is acceptable only for networks with user specified subnets. |
| 660 | 660 |
func validateNetworkingConfig(n libnetwork.Network, epConfig *networktypes.EndpointSettings) error {
|
| 661 |
+ if n == nil || epConfig == nil {
|
|
| 662 |
+ return nil |
|
| 663 |
+ } |
|
| 661 | 664 |
if !hasUserDefinedIPAddress(epConfig) {
|
| 662 | 665 |
return nil |
| 663 | 666 |
} |
| ... | ... |
@@ -704,7 +707,7 @@ func cleanOperationalData(es *networktypes.EndpointSettings) {
|
| 704 | 704 |
es.MacAddress = "" |
| 705 | 705 |
} |
| 706 | 706 |
|
| 707 |
-func (daemon *Daemon) updateNetworkConfig(container *container.Container, idOrName string, updateSettings bool) (libnetwork.Network, error) {
|
|
| 707 |
+func (daemon *Daemon) updateNetworkConfig(container *container.Container, idOrName string, endpointConfig *networktypes.EndpointSettings, updateSettings bool) (libnetwork.Network, error) {
|
|
| 708 | 708 |
if container.HostConfig.NetworkMode.IsContainer() {
|
| 709 | 709 |
return nil, runconfig.ErrConflictSharedNetwork |
| 710 | 710 |
} |
| ... | ... |
@@ -715,11 +718,24 @@ func (daemon *Daemon) updateNetworkConfig(container *container.Container, idOrNa |
| 715 | 715 |
return nil, nil |
| 716 | 716 |
} |
| 717 | 717 |
|
| 718 |
+ if !containertypes.NetworkMode(idOrName).IsUserDefined() {
|
|
| 719 |
+ if hasUserDefinedIPAddress(endpointConfig) {
|
|
| 720 |
+ return nil, runconfig.ErrUnsupportedNetworkAndIP |
|
| 721 |
+ } |
|
| 722 |
+ if endpointConfig != nil && len(endpointConfig.Aliases) > 0 {
|
|
| 723 |
+ return nil, runconfig.ErrUnsupportedNetworkAndAlias |
|
| 724 |
+ } |
|
| 725 |
+ } |
|
| 726 |
+ |
|
| 718 | 727 |
n, err := daemon.FindNetwork(idOrName) |
| 719 | 728 |
if err != nil {
|
| 720 | 729 |
return nil, err |
| 721 | 730 |
} |
| 722 | 731 |
|
| 732 |
+ if err := validateNetworkingConfig(n, endpointConfig); err != nil {
|
|
| 733 |
+ return nil, err |
|
| 734 |
+ } |
|
| 735 |
+ |
|
| 723 | 736 |
if updateSettings {
|
| 724 | 737 |
if err := daemon.updateNetworkSettings(container, n); err != nil {
|
| 725 | 738 |
return nil, err |
| ... | ... |
@@ -734,7 +750,7 @@ func (daemon *Daemon) ConnectToNetwork(container *container.Container, idOrName |
| 734 | 734 |
if container.RemovalInProgress || container.Dead {
|
| 735 | 735 |
return derr.ErrorCodeRemovalContainer.WithArgs(container.ID) |
| 736 | 736 |
} |
| 737 |
- if _, err := daemon.updateNetworkConfig(container, idOrName, true); err != nil {
|
|
| 737 |
+ if _, err := daemon.updateNetworkConfig(container, idOrName, endpointConfig, true); err != nil {
|
|
| 738 | 738 |
return err |
| 739 | 739 |
} |
| 740 | 740 |
} else {
|
| ... | ... |
@@ -749,7 +765,7 @@ func (daemon *Daemon) ConnectToNetwork(container *container.Container, idOrName |
| 749 | 749 |
} |
| 750 | 750 |
|
| 751 | 751 |
func (daemon *Daemon) connectToNetwork(container *container.Container, idOrName string, endpointConfig *networktypes.EndpointSettings, updateSettings bool) (err error) {
|
| 752 |
- n, err := daemon.updateNetworkConfig(container, idOrName, updateSettings) |
|
| 752 |
+ n, err := daemon.updateNetworkConfig(container, idOrName, endpointConfig, updateSettings) |
|
| 753 | 753 |
if err != nil {
|
| 754 | 754 |
return err |
| 755 | 755 |
} |
| ... | ... |
@@ -760,17 +776,6 @@ func (daemon *Daemon) connectToNetwork(container *container.Container, idOrName |
| 760 | 760 |
controller := daemon.netController |
| 761 | 761 |
|
| 762 | 762 |
if endpointConfig != nil {
|
| 763 |
- if !containertypes.NetworkMode(idOrName).IsUserDefined() && hasUserDefinedIPAddress(endpointConfig) {
|
|
| 764 |
- return runconfig.ErrUnsupportedNetworkAndIP |
|
| 765 |
- } |
|
| 766 |
- |
|
| 767 |
- if err := validateNetworkingConfig(n, endpointConfig); err != nil {
|
|
| 768 |
- return err |
|
| 769 |
- } |
|
| 770 |
- |
|
| 771 |
- if !containertypes.NetworkMode(idOrName).IsUserDefined() && len(endpointConfig.Aliases) > 0 {
|
|
| 772 |
- return runconfig.ErrUnsupportedNetworkAndAlias |
|
| 773 |
- } |
|
| 774 | 763 |
container.NetworkSettings.Networks[n.Name()] = endpointConfig |
| 775 | 764 |
} |
| 776 | 765 |
|
| ... | ... |
@@ -1147,7 +1147,7 @@ func (s *DockerNetworkSuite) TestDockerNetworkConnectPreferredIP(c *check.C) {
|
| 1147 | 1147 |
|
| 1148 | 1148 |
func (s *DockerNetworkSuite) TestDockerNetworkUnsupportedPreferredIP(c *check.C) {
|
| 1149 | 1149 |
// preferred IP is not supported on predefined networks |
| 1150 |
- for _, mode := range []string{"none", "host", "bridge"} {
|
|
| 1150 |
+ for _, mode := range []string{"none", "host", "bridge", "default"} {
|
|
| 1151 | 1151 |
checkUnsupportedNetworkAndIP(c, mode) |
| 1152 | 1152 |
} |
| 1153 | 1153 |
|
| ... | ... |
@@ -1300,6 +1300,16 @@ func (s *DockerSuite) TestUserDefinedNetworkConnectDisconnectAlias(c *check.C) {
|
| 1300 | 1300 |
// ping to net2 scoped alias "bar" must still succeed |
| 1301 | 1301 |
_, _, err = dockerCmdWithError("exec", "second", "ping", "-c", "1", "bar")
|
| 1302 | 1302 |
c.Assert(err, check.IsNil) |
| 1303 |
+ |
|
| 1304 |
+ // verify the alias option is rejected when running on predefined network |
|
| 1305 |
+ out, _, err := dockerCmdWithError("run", "--rm", "--name=any", "--net-alias=any", "busybox", "top")
|
|
| 1306 |
+ c.Assert(err, checker.NotNil, check.Commentf("out: %s", out))
|
|
| 1307 |
+ c.Assert(out, checker.Contains, runconfig.ErrUnsupportedNetworkAndAlias.Error()) |
|
| 1308 |
+ |
|
| 1309 |
+ // verify the alias option is rejected when connecting to predefined network |
|
| 1310 |
+ out, _, err = dockerCmdWithError("network", "connect", "--alias=any", "bridge", "first")
|
|
| 1311 |
+ c.Assert(err, checker.NotNil, check.Commentf("out: %s", out))
|
|
| 1312 |
+ c.Assert(out, checker.Contains, runconfig.ErrUnsupportedNetworkAndAlias.Error()) |
|
| 1303 | 1313 |
} |
| 1304 | 1314 |
|
| 1305 | 1315 |
func (s *DockerSuite) TestUserDefinedNetworkConnectivity(c *check.C) {
|
| ... | ... |
@@ -442,7 +442,7 @@ func Parse(cmd *flag.FlagSet, args []string) (*container.Config, *container.Host |
| 442 | 442 |
networkingConfig.EndpointsConfig[string(hostConfig.NetworkMode)] = epConfig |
| 443 | 443 |
} |
| 444 | 444 |
|
| 445 |
- if hostConfig.NetworkMode.IsUserDefined() && flAliases.Len() > 0 {
|
|
| 445 |
+ if flAliases.Len() > 0 {
|
|
| 446 | 446 |
epConfig := networkingConfig.EndpointsConfig[string(hostConfig.NetworkMode)] |
| 447 | 447 |
if epConfig == nil {
|
| 448 | 448 |
epConfig = &networktypes.EndpointSettings{}
|