mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00
Support --network=default as if it was private
Docker defines an option of "default" which means to use the default network. We should support this with the same code path as --network="". This is important for compatibility with the Docker API. Fixes: https://github.com/containers/podman/issues/8544 Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
@ -233,6 +233,8 @@ func namespaceOptions(ctx context.Context, s *specgen.SpecGenerator, rt *libpod.
|
|||||||
val = fmt.Sprintf("slirp4netns:%s", s.NetNS.Value)
|
val = fmt.Sprintf("slirp4netns:%s", s.NetNS.Value)
|
||||||
}
|
}
|
||||||
toReturn = append(toReturn, libpod.WithNetNS(portMappings, postConfigureNetNS, val, nil))
|
toReturn = append(toReturn, libpod.WithNetNS(portMappings, postConfigureNetNS, val, nil))
|
||||||
|
case specgen.Private:
|
||||||
|
fallthrough
|
||||||
case specgen.Bridge:
|
case specgen.Bridge:
|
||||||
portMappings, err := createPortMappings(ctx, s, img)
|
portMappings, err := createPortMappings(ctx, s, img)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -258,24 +258,22 @@ func ParseNetworkNamespace(ns string) (Namespace, []string, error) {
|
|||||||
var cniNetworks []string
|
var cniNetworks []string
|
||||||
// Net defaults to Slirp on rootless
|
// Net defaults to Slirp on rootless
|
||||||
switch {
|
switch {
|
||||||
case ns == "slirp4netns", strings.HasPrefix(ns, "slirp4netns:"):
|
case ns == string(Slirp), strings.HasPrefix(ns, string(Slirp)+":"):
|
||||||
toReturn.NSMode = Slirp
|
toReturn.NSMode = Slirp
|
||||||
case ns == "pod":
|
case ns == string(FromPod):
|
||||||
toReturn.NSMode = FromPod
|
toReturn.NSMode = FromPod
|
||||||
case ns == "":
|
case ns == "" || ns == string(Default) || ns == string(Private):
|
||||||
if rootless.IsRootless() {
|
if rootless.IsRootless() {
|
||||||
toReturn.NSMode = Slirp
|
toReturn.NSMode = Slirp
|
||||||
} else {
|
} else {
|
||||||
toReturn.NSMode = Bridge
|
toReturn.NSMode = Bridge
|
||||||
}
|
}
|
||||||
case ns == "bridge":
|
case ns == string(Bridge):
|
||||||
toReturn.NSMode = Bridge
|
toReturn.NSMode = Bridge
|
||||||
case ns == "none":
|
case ns == string(NoNetwork):
|
||||||
toReturn.NSMode = NoNetwork
|
toReturn.NSMode = NoNetwork
|
||||||
case ns == "host":
|
case ns == string(Host):
|
||||||
toReturn.NSMode = Host
|
toReturn.NSMode = Host
|
||||||
case ns == "private":
|
|
||||||
toReturn.NSMode = Private
|
|
||||||
case strings.HasPrefix(ns, "ns:"):
|
case strings.HasPrefix(ns, "ns:"):
|
||||||
split := strings.SplitN(ns, ":", 2)
|
split := strings.SplitN(ns, ":", 2)
|
||||||
if len(split) != 2 {
|
if len(split) != 2 {
|
||||||
@ -283,7 +281,7 @@ func ParseNetworkNamespace(ns string) (Namespace, []string, error) {
|
|||||||
}
|
}
|
||||||
toReturn.NSMode = Path
|
toReturn.NSMode = Path
|
||||||
toReturn.Value = split[1]
|
toReturn.Value = split[1]
|
||||||
case strings.HasPrefix(ns, "container:"):
|
case strings.HasPrefix(ns, string(FromContainer)+":"):
|
||||||
split := strings.SplitN(ns, ":", 2)
|
split := strings.SplitN(ns, ":", 2)
|
||||||
if len(split) != 2 {
|
if len(split) != 2 {
|
||||||
return toReturn, nil, errors.Errorf("must provide name or ID or a container when specifying container:")
|
return toReturn, nil, errors.Errorf("must provide name or ID or a container when specifying container:")
|
||||||
|
@ -49,9 +49,28 @@ var _ = Describe("Podman run networking", func() {
|
|||||||
Expect(session.ExitCode()).To(Equal(0))
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman run network connection with default", func() {
|
||||||
|
session := podmanTest.Podman([]string{"run", "--network", "default", ALPINE, "wget", "www.podman.io"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("podman run network connection with none", func() {
|
||||||
|
session := podmanTest.Podman([]string{"run", "--network", "none", ALPINE, "wget", "www.podman.io"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(1))
|
||||||
|
Expect(session.ErrorToString()).To(ContainSubstring("wget: bad address 'www.podman.io'"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("podman run network connection with private", func() {
|
||||||
|
session := podmanTest.Podman([]string{"run", "--network", "private", ALPINE, "wget", "www.podman.io"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
})
|
||||||
|
|
||||||
It("podman run network connection with loopback", func() {
|
It("podman run network connection with loopback", func() {
|
||||||
session := podmanTest.Podman([]string{"run", "-dt", "--network", "host", ALPINE, "wget", "www.podman.io"})
|
session := podmanTest.Podman([]string{"run", "--network", "host", ALPINE, "wget", "www.podman.io"})
|
||||||
session.Wait(90)
|
session.WaitWithDefaultTimeout()
|
||||||
Expect(session.ExitCode()).To(Equal(0))
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user