Merge pull request #3579 from QiWang19/dns_net

fix --dns and --network conflict
This commit is contained in:
OpenShift Merge Robot
2019-07-19 02:22:28 +02:00
committed by GitHub
4 changed files with 38 additions and 9 deletions

View File

@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"strings"
"github.com/containers/libpod/cmd/podman/cliconfig" "github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/pkg/adapter" "github.com/containers/libpod/pkg/adapter"
@ -77,6 +78,16 @@ func createInit(c *cliconfig.PodmanCommand) error {
logrus.Warn("setting security options with --privileged has no effect") logrus.Warn("setting security options with --privileged has no effect")
} }
var setNet string
if c.IsSet("network") {
setNet = c.String("network")
} else if c.IsSet("net") {
setNet = c.String("net")
}
if (c.IsSet("dns") || c.IsSet("dns-opt") || c.IsSet("dns-search")) && (setNet == "none" || strings.HasPrefix(setNet, "container:")) {
return errors.Errorf("conflicting options: dns and the network mode.")
}
// Docker-compatibility: the "-h" flag for run/create is reserved for // Docker-compatibility: the "-h" flag for run/create is reserved for
// the hostname (see https://github.com/containers/libpod/issues/1367). // the hostname (see https://github.com/containers/libpod/issues/1367).

View File

@ -214,7 +214,7 @@ Limit write rate (IO per second) to a device (e.g. --device-write-iops=/dev/sda:
**--dns**=*dns* **--dns**=*dns*
Set custom DNS servers Set custom DNS servers. Invalid if using **--dns** and **--network** that is set to 'none' or 'container:<name|id>'.
This option can be used to override the DNS This option can be used to override the DNS
configuration passed to the container. Typically this is necessary when the configuration passed to the container. Typically this is necessary when the
@ -226,11 +226,11 @@ The **/etc/resolv.conf** file in the image will be used without changes.
**--dns-option**=*option* **--dns-option**=*option*
Set custom DNS options Set custom DNS options. Invalid if using **--dns-option** and **--network** that is set to 'none' or 'container:<name|id>'.
**--dns-search**=*domain* **--dns-search**=*domain*
Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain) Set custom DNS search domains. Invalid if using **--dns-search** and **--network** that is set to 'none' or 'container:<name|id>'. (Use --dns-search=. if you don't wish to set the search domain)
**--entrypoint**=*"command"* | *'["command", "arg1", ...]'* **--entrypoint**=*"command"* | *'["command", "arg1", ...]'*
@ -499,7 +499,7 @@ This works for both background and foreground containers.
**--network**, **--net**="*bridge*" **--network**, **--net**="*bridge*"
Set the Network mode for the container Set the Network mode for the container. Invalid if using **--dns**, **--dns-option**, or **--dns-search** with **--network** that is set to 'none' or 'container:<name|id>'.
'bridge': create a network stack on the default bridge 'bridge': create a network stack on the default bridge
'none': no networking 'none': no networking
'container:<name|id>': reuse another container's network stack 'container:<name|id>': reuse another container's network stack

View File

@ -220,7 +220,7 @@ Limit write rate (IO per second) to a device (e.g. --device-write-iops=/dev/sda:
**--dns**=*dns* **--dns**=*dns*
Set custom DNS servers Set custom DNS servers. Invalid if using **--dns** with **--network** that is set to 'none' or 'container:<name|id>'.
This option can be used to override the DNS This option can be used to override the DNS
configuration passed to the container. Typically this is necessary when the configuration passed to the container. Typically this is necessary when the
@ -232,11 +232,11 @@ The **/etc/resolv.conf** file in the image will be used without changes.
**--dns-option**=*option* **--dns-option**=*option*
Set custom DNS options Set custom DNS options. Invalid if using **--dns-option** with **--network** that is set to 'none' or 'container:<name|id>'.
**--dns-search**=*domain* **--dns-search**=*domain*
Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain) Set custom DNS search domains. Invalid if using **--dns-search** and **--network** that is set to 'none' or 'container:<name|id>'. (Use --dns-search=. if you don't wish to set the search domain)
**--entrypoint**=*"command"* | *'["command", "arg1", ...]'* **--entrypoint**=*"command"* | *'["command", "arg1", ...]'*
@ -510,9 +510,9 @@ to the container with **--name** then it will generate a random
string name. The name is useful any place you need to identify a container. string name. The name is useful any place you need to identify a container.
This works for both background and foreground containers. This works for both background and foreground containers.
**--network**, **--net**=*mode* **--network**, **--net**=*node*
Set the Network mode for the container: Set the Network mode for the container. Invalid if using **--dns**, **--dns-option**, or **--dns-search** with **--network** that is set to 'none' or 'container:<name|id>'.
- `bridge`: create a network stack on the default bridge - `bridge`: create a network stack on the default bridge
- `none`: no networking - `none`: no networking
- `container:<name|id>`: reuse another container's network stack - `container:<name|id>`: reuse another container's network stack

View File

@ -94,4 +94,22 @@ var _ = Describe("Podman run dns", func() {
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
Expect(session.LineInOutputContains("foobar")).To(BeTrue()) Expect(session.LineInOutputContains("foobar")).To(BeTrue())
}) })
It("podman run mutually excludes --dns* and --network", func() {
session := podmanTest.Podman([]string{"run", "--dns=1.2.3.4", "--network", "container:ALPINE", ALPINE})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Not(Equal(0)))
session = podmanTest.Podman([]string{"run", "--dns-opt=1.2.3.4", "--network", "container:ALPINE", ALPINE})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Not(Equal(0)))
session = podmanTest.Podman([]string{"run", "--dns-search=foobar.com", "--network", "none", ALPINE})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Not(Equal(0)))
session = podmanTest.Podman([]string{"run", "--dns=1.2.3.4", "--network", "host", ALPINE})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To((Equal(0)))
})
}) })