Add support --net=container with --mac-address,--add-host error out
Signed-off-by: Lei Jitang <leijitang@huawei.com>
This commit is contained in:
parent
101f982059
commit
0e08e9aca1
5 changed files with 54 additions and 9 deletions
|
@ -1107,7 +1107,7 @@ func (container *Container) setupContainerDns() error {
|
|||
return err
|
||||
}
|
||||
|
||||
if config.NetworkMode != "host" {
|
||||
if config.NetworkMode.IsBridge() || config.NetworkMode.IsNone() {
|
||||
// check configurations for any container/daemon dns settings
|
||||
if len(config.Dns) > 0 || len(daemon.config.Dns) > 0 || len(config.DnsSearch) > 0 || len(daemon.config.DnsSearch) > 0 {
|
||||
var (
|
||||
|
|
|
@ -282,7 +282,8 @@ With the networking mode set to `host` a container will share the host's
|
|||
network stack and all interfaces from the host will be available to the
|
||||
container. The container's hostname will match the hostname on the host
|
||||
system. Publishing ports and linking to other containers will not work
|
||||
when sharing the host's network stack.
|
||||
when sharing the host's network stack. Note that `--add-host` `--hostname`
|
||||
`--dns` `--dns-search` and `--mac-address` is invalid in `host` netmode.
|
||||
|
||||
Compared to the default `bridge` mode, the `host` mode gives *significantly*
|
||||
better networking performance since it uses the host's native networking stack
|
||||
|
@ -298,7 +299,9 @@ or a High Performance Web Server.
|
|||
|
||||
With the networking mode set to `container` a container will share the
|
||||
network stack of another container. The other container's name must be
|
||||
provided in the format of `--net container:<name|id>`.
|
||||
provided in the format of `--net container:<name|id>`. Note that `--add-host`
|
||||
`--hostname` `--dns` `--dns-search` and `--mac-address` is invalid
|
||||
in `container` netmode.
|
||||
|
||||
Example running a Redis container with Redis binding to `localhost` then
|
||||
running the `redis-cli` command and connecting to the Redis server over the
|
||||
|
|
|
@ -371,6 +371,33 @@ func (s *DockerSuite) TestRunLinkToContainerNetMode(c *check.C) {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *DockerSuite) TestRunContainerNetModeWithDnsMacHosts(c *check.C) {
|
||||
cmd := exec.Command(dockerBinary, "run", "-d", "--name", "parent", "busybox", "top")
|
||||
out, _, err := runCommandWithOutput(cmd)
|
||||
if err != nil {
|
||||
c.Fatalf("failed to run container: %v, output: %q", err, out)
|
||||
}
|
||||
|
||||
cmd = exec.Command(dockerBinary, "run", "--dns", "1.2.3.4", "--net=container:parent", "busybox")
|
||||
out, _, err = runCommandWithOutput(cmd)
|
||||
if err == nil || !strings.Contains(out, "Conflicting options: --dns and the network mode") {
|
||||
c.Fatalf("run --net=container with --dns should error out")
|
||||
}
|
||||
|
||||
cmd = exec.Command(dockerBinary, "run", "--mac-address", "92:d0:c6:0a:29:33", "--net=container:parent", "busybox")
|
||||
out, _, err = runCommandWithOutput(cmd)
|
||||
if err == nil || !strings.Contains(out, "--mac-address and the network mode") {
|
||||
c.Fatalf("run --net=container with --mac-address should error out")
|
||||
}
|
||||
|
||||
cmd = exec.Command(dockerBinary, "run", "--add-host", "test:192.168.2.109", "--net=container:parent", "busybox")
|
||||
out, _, err = runCommandWithOutput(cmd)
|
||||
if err == nil || !strings.Contains(out, "--add-host and the network mode") {
|
||||
c.Fatalf("run --net=container with --add-host should error out")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *DockerSuite) TestRunModeNetContainerHostname(c *check.C) {
|
||||
testRequires(c, ExecSupport)
|
||||
cmd := exec.Command(dockerBinary, "run", "-i", "-d", "--name", "parent", "busybox", "top")
|
||||
|
|
|
@ -21,6 +21,10 @@ func (n NetworkMode) IsPrivate() bool {
|
|||
return !(n.IsHost() || n.IsContainer() || n.IsNone())
|
||||
}
|
||||
|
||||
func (n NetworkMode) IsBridge() bool {
|
||||
return n == "bridge"
|
||||
}
|
||||
|
||||
func (n NetworkMode) IsHost() bool {
|
||||
return n == "host"
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@ var (
|
|||
ErrConflictNetworkAndDns = fmt.Errorf("Conflicting options: --dns and the network mode (--net).")
|
||||
ErrConflictNetworkHostname = fmt.Errorf("Conflicting options: -h and the network mode (--net)")
|
||||
ErrConflictHostNetworkAndLinks = fmt.Errorf("Conflicting options: --net=host can't be used with links. This would result in undefined behavior.")
|
||||
ErrConflictContainerNetworkAndMac = fmt.Errorf("Conflicting options: --mac-address and the network mode (--net).")
|
||||
ErrConflictNetworkHosts = fmt.Errorf("Conflicting options: --add-host and the network mode (--net).")
|
||||
)
|
||||
|
||||
func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSet, error) {
|
||||
|
@ -99,12 +101,6 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe
|
|||
return nil, nil, cmd, err
|
||||
}
|
||||
|
||||
// Validate input params starting with the input mac address
|
||||
if *flMacAddress != "" {
|
||||
if _, err := opts.ValidateMACAddress(*flMacAddress); err != nil {
|
||||
return nil, nil, cmd, fmt.Errorf("%s is not a valid mac address", *flMacAddress)
|
||||
}
|
||||
}
|
||||
var (
|
||||
attachStdin = flAttach.Get("stdin")
|
||||
attachStdout = flAttach.Get("stdout")
|
||||
|
@ -132,6 +128,21 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe
|
|||
return nil, nil, cmd, ErrConflictNetworkAndDns
|
||||
}
|
||||
|
||||
if (netMode.IsContainer() || netMode.IsHost()) && flExtraHosts.Len() > 0 {
|
||||
return nil, nil, cmd, ErrConflictNetworkHosts
|
||||
}
|
||||
|
||||
if (netMode.IsContainer() || netMode.IsHost()) && *flMacAddress != "" {
|
||||
return nil, nil, cmd, ErrConflictContainerNetworkAndMac
|
||||
}
|
||||
|
||||
// Validate the input mac address
|
||||
if *flMacAddress != "" {
|
||||
if _, err := opts.ValidateMACAddress(*flMacAddress); err != nil {
|
||||
return nil, nil, cmd, fmt.Errorf("%s is not a valid mac address", *flMacAddress)
|
||||
}
|
||||
}
|
||||
|
||||
// If neither -d or -a are set, attach to everything by default
|
||||
if flAttach.Len() == 0 {
|
||||
attachStdout = true
|
||||
|
|
Loading…
Reference in a new issue