Signed-off-by: Tibor Vass <tibor@docker.com>
| ... | ... |
@@ -20,7 +20,6 @@ import ( |
| 20 | 20 |
"github.com/docker/docker/pkg/nat" |
| 21 | 21 |
"github.com/docker/docker/pkg/symlink" |
| 22 | 22 |
"github.com/docker/docker/pkg/system" |
| 23 |
- "github.com/docker/docker/runconfig" |
|
| 24 | 23 |
"github.com/docker/docker/utils" |
| 25 | 24 |
"github.com/docker/docker/volume" |
| 26 | 25 |
"github.com/docker/libnetwork" |
| ... | ... |
@@ -374,64 +373,6 @@ func (container *Container) SetupWorkingDirectory() error {
|
| 374 | 374 |
return nil |
| 375 | 375 |
} |
| 376 | 376 |
|
| 377 |
-// DisconnectFromNetwork disconnects a container from a network |
|
| 378 |
-func (container *Container) DisconnectFromNetwork(n libnetwork.Network) error {
|
|
| 379 |
- if !container.Running {
|
|
| 380 |
- return derr.ErrorCodeNotRunning.WithArgs(container.ID) |
|
| 381 |
- } |
|
| 382 |
- |
|
| 383 |
- if container.HostConfig.NetworkMode.IsHost() && runconfig.NetworkMode(n.Type()).IsHost() {
|
|
| 384 |
- return runconfig.ErrConflictHostNetwork |
|
| 385 |
- } |
|
| 386 |
- |
|
| 387 |
- if err := container.disconnectFromNetwork(n); err != nil {
|
|
| 388 |
- return err |
|
| 389 |
- } |
|
| 390 |
- |
|
| 391 |
- if err := container.ToDiskLocking(); err != nil {
|
|
| 392 |
- return fmt.Errorf("Error saving container to disk: %v", err)
|
|
| 393 |
- } |
|
| 394 |
- return nil |
|
| 395 |
-} |
|
| 396 |
- |
|
| 397 |
-func (container *Container) disconnectFromNetwork(n libnetwork.Network) error {
|
|
| 398 |
- var ( |
|
| 399 |
- ep libnetwork.Endpoint |
|
| 400 |
- sbox libnetwork.Sandbox |
|
| 401 |
- ) |
|
| 402 |
- |
|
| 403 |
- s := func(current libnetwork.Endpoint) bool {
|
|
| 404 |
- epInfo := current.Info() |
|
| 405 |
- if epInfo == nil {
|
|
| 406 |
- return false |
|
| 407 |
- } |
|
| 408 |
- if sb := epInfo.Sandbox(); sb != nil {
|
|
| 409 |
- if sb.ContainerID() == container.ID {
|
|
| 410 |
- ep = current |
|
| 411 |
- sbox = sb |
|
| 412 |
- return true |
|
| 413 |
- } |
|
| 414 |
- } |
|
| 415 |
- return false |
|
| 416 |
- } |
|
| 417 |
- n.WalkEndpoints(s) |
|
| 418 |
- |
|
| 419 |
- if ep == nil {
|
|
| 420 |
- return fmt.Errorf("container %s is not connected to the network", container.ID)
|
|
| 421 |
- } |
|
| 422 |
- |
|
| 423 |
- if err := ep.Leave(sbox); err != nil {
|
|
| 424 |
- return fmt.Errorf("container %s failed to leave network %s: %v", container.ID, n.Name(), err)
|
|
| 425 |
- } |
|
| 426 |
- |
|
| 427 |
- if err := ep.Delete(); err != nil {
|
|
| 428 |
- return fmt.Errorf("endpoint delete failed for container %s on network %s: %v", container.ID, n.Name(), err)
|
|
| 429 |
- } |
|
| 430 |
- |
|
| 431 |
- delete(container.NetworkSettings.Networks, n.Name()) |
|
| 432 |
- return nil |
|
| 433 |
-} |
|
| 434 |
- |
|
| 435 | 377 |
// appendNetworkMounts appends any network mounts to the array of mount points passed in |
| 436 | 378 |
func appendNetworkMounts(container *Container, volumeMounts []volume.MountPoint) ([]volume.MountPoint, error) {
|
| 437 | 379 |
for _, mnt := range container.NetworkMounts() {
|
| ... | ... |
@@ -5,7 +5,6 @@ package container |
| 5 | 5 |
import ( |
| 6 | 6 |
"github.com/docker/docker/daemon/execdriver" |
| 7 | 7 |
"github.com/docker/docker/volume" |
| 8 |
- "github.com/docker/libnetwork" |
|
| 9 | 8 |
) |
| 10 | 9 |
|
| 11 | 10 |
// DefaultPathEnv is deliberately empty on Windows as the default path will be set by |
| ... | ... |
@@ -26,11 +25,6 @@ func (container *Container) CreateDaemonEnvironment(linkedEnv []string) []string |
| 26 | 26 |
return container.Config.Env |
| 27 | 27 |
} |
| 28 | 28 |
|
| 29 |
-// DisconnectFromNetwork disconnects a container from the network. |
|
| 30 |
-func (container *Container) DisconnectFromNetwork(n libnetwork.Network) error {
|
|
| 31 |
- return nil |
|
| 32 |
-} |
|
| 33 |
- |
|
| 34 | 29 |
// SetupWorkingDirectory initializes the container working directory. |
| 35 | 30 |
// This is a NOOP In windows. |
| 36 | 31 |
func (container *Container) SetupWorkingDirectory() error {
|
| ... | ... |
@@ -657,6 +657,62 @@ func (daemon *Daemon) connectToNetwork(container *container.Container, idOrName |
| 657 | 657 |
return nil |
| 658 | 658 |
} |
| 659 | 659 |
|
| 660 |
+// DisconnectFromNetwork disconnects container from network n. |
|
| 661 |
+func (daemon *Daemon) DisconnectFromNetwork(container *container.Container, n libnetwork.Network) error {
|
|
| 662 |
+ if !container.Running {
|
|
| 663 |
+ return derr.ErrorCodeNotRunning.WithArgs(container.ID) |
|
| 664 |
+ } |
|
| 665 |
+ |
|
| 666 |
+ if container.HostConfig.NetworkMode.IsHost() && runconfig.NetworkMode(n.Type()).IsHost() {
|
|
| 667 |
+ return runconfig.ErrConflictHostNetwork |
|
| 668 |
+ } |
|
| 669 |
+ |
|
| 670 |
+ return disconnectFromNetwork(container, n) |
|
| 671 |
+} |
|
| 672 |
+ |
|
| 673 |
+func disconnectFromNetwork(container *container.Container, n libnetwork.Network) error {
|
|
| 674 |
+ |
|
| 675 |
+ if err := container.ToDiskLocking(); err != nil {
|
|
| 676 |
+ return fmt.Errorf("Error saving container to disk: %v", err)
|
|
| 677 |
+ } |
|
| 678 |
+ |
|
| 679 |
+ var ( |
|
| 680 |
+ ep libnetwork.Endpoint |
|
| 681 |
+ sbox libnetwork.Sandbox |
|
| 682 |
+ ) |
|
| 683 |
+ |
|
| 684 |
+ s := func(current libnetwork.Endpoint) bool {
|
|
| 685 |
+ epInfo := current.Info() |
|
| 686 |
+ if epInfo == nil {
|
|
| 687 |
+ return false |
|
| 688 |
+ } |
|
| 689 |
+ if sb := epInfo.Sandbox(); sb != nil {
|
|
| 690 |
+ if sb.ContainerID() == container.ID {
|
|
| 691 |
+ ep = current |
|
| 692 |
+ sbox = sb |
|
| 693 |
+ return true |
|
| 694 |
+ } |
|
| 695 |
+ } |
|
| 696 |
+ return false |
|
| 697 |
+ } |
|
| 698 |
+ n.WalkEndpoints(s) |
|
| 699 |
+ |
|
| 700 |
+ if ep == nil {
|
|
| 701 |
+ return fmt.Errorf("container %s is not connected to the network", container.ID)
|
|
| 702 |
+ } |
|
| 703 |
+ |
|
| 704 |
+ if err := ep.Leave(sbox); err != nil {
|
|
| 705 |
+ return fmt.Errorf("container %s failed to leave network %s: %v", container.ID, n.Name(), err)
|
|
| 706 |
+ } |
|
| 707 |
+ |
|
| 708 |
+ if err := ep.Delete(); err != nil {
|
|
| 709 |
+ return fmt.Errorf("endpoint delete failed for container %s on network %s: %v", container.ID, n.Name(), err)
|
|
| 710 |
+ } |
|
| 711 |
+ |
|
| 712 |
+ delete(container.NetworkSettings.Networks, n.Name()) |
|
| 713 |
+ return nil |
|
| 714 |
+} |
|
| 715 |
+ |
|
| 660 | 716 |
func (daemon *Daemon) initializeNetworking(container *container.Container) error {
|
| 661 | 717 |
var err error |
| 662 | 718 |
|
| ... | ... |
@@ -9,6 +9,7 @@ import ( |
| 9 | 9 |
"github.com/docker/docker/daemon/execdriver" |
| 10 | 10 |
derr "github.com/docker/docker/errors" |
| 11 | 11 |
"github.com/docker/docker/layer" |
| 12 |
+ "github.com/docker/libnetwork" |
|
| 12 | 13 |
) |
| 13 | 14 |
|
| 14 | 15 |
func (daemon *Daemon) setupLinkedContainers(container *container.Container) ([]string, error) {
|
| ... | ... |
@@ -24,6 +25,11 @@ func (daemon *Daemon) ConnectToNetwork(container *container.Container, idOrName |
| 24 | 24 |
return nil |
| 25 | 25 |
} |
| 26 | 26 |
|
| 27 |
+// DisconnectFromNetwork disconnects a container from the network. |
|
| 28 |
+func (daemon *Daemon) DisconnectFromNetwork(container *container.Container, n libnetwork.Network) error {
|
|
| 29 |
+ return nil |
|
| 30 |
+} |
|
| 31 |
+ |
|
| 27 | 32 |
func (daemon *Daemon) populateCommand(c *container.Container, env []string) error {
|
| 28 | 33 |
en := &execdriver.Network{
|
| 29 | 34 |
Interface: nil, |
| ... | ... |
@@ -144,7 +144,7 @@ func (daemon *Daemon) DisconnectContainerFromNetwork(containerName string, netwo |
| 144 | 144 |
if err != nil {
|
| 145 | 145 |
return err |
| 146 | 146 |
} |
| 147 |
- return container.DisconnectFromNetwork(network) |
|
| 147 |
+ return daemon.DisconnectFromNetwork(container, network) |
|
| 148 | 148 |
} |
| 149 | 149 |
|
| 150 | 150 |
// GetNetworkDriverList returns the list of plugins drivers |