mirror of https://github.com/docker/docs.git
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
|
@ -1107,7 +1107,7 @@ func (container *Container) setupContainerDns() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.NetworkMode != "host" {
|
if config.NetworkMode.IsBridge() || config.NetworkMode.IsNone() {
|
||||||
// check configurations for any container/daemon dns settings
|
// 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 {
|
if len(config.Dns) > 0 || len(daemon.config.Dns) > 0 || len(config.DnsSearch) > 0 || len(daemon.config.DnsSearch) > 0 {
|
||||||
var (
|
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
|
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
|
container. The container's hostname will match the hostname on the host
|
||||||
system. Publishing ports and linking to other containers will not work
|
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*
|
Compared to the default `bridge` mode, the `host` mode gives *significantly*
|
||||||
better networking performance since it uses the host's native networking stack
|
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
|
With the networking mode set to `container` a container will share the
|
||||||
network stack of another container. The other container's name must be
|
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
|
Example running a Redis container with Redis binding to `localhost` then
|
||||||
running the `redis-cli` command and connecting to the Redis server over the
|
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) {
|
func (s *DockerSuite) TestRunModeNetContainerHostname(c *check.C) {
|
||||||
testRequires(c, ExecSupport)
|
testRequires(c, ExecSupport)
|
||||||
cmd := exec.Command(dockerBinary, "run", "-i", "-d", "--name", "parent", "busybox", "top")
|
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())
|
return !(n.IsHost() || n.IsContainer() || n.IsNone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n NetworkMode) IsBridge() bool {
|
||||||
|
return n == "bridge"
|
||||||
|
}
|
||||||
|
|
||||||
func (n NetworkMode) IsHost() bool {
|
func (n NetworkMode) IsHost() bool {
|
||||||
return n == "host"
|
return n == "host"
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ var (
|
||||||
ErrConflictNetworkAndDns = fmt.Errorf("Conflicting options: --dns and the network mode (--net).")
|
ErrConflictNetworkAndDns = fmt.Errorf("Conflicting options: --dns and the network mode (--net).")
|
||||||
ErrConflictNetworkHostname = fmt.Errorf("Conflicting options: -h 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.")
|
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) {
|
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
|
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 (
|
var (
|
||||||
attachStdin = flAttach.Get("stdin")
|
attachStdin = flAttach.Get("stdin")
|
||||||
attachStdout = flAttach.Get("stdout")
|
attachStdout = flAttach.Get("stdout")
|
||||||
|
@ -132,6 +128,21 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe
|
||||||
return nil, nil, cmd, ErrConflictNetworkAndDns
|
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 neither -d or -a are set, attach to everything by default
|
||||||
if flAttach.Len() == 0 {
|
if flAttach.Len() == 0 {
|
||||||
attachStdout = true
|
attachStdout = true
|
||||||
|
|
Loading…
Reference in New Issue