mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #39852 from thaJeztah/detect_invalid_linked_container
Return "invalid parameter" when linking to non-existing container
This commit is contained in:
commit
cd9e4ec240
2 changed files with 37 additions and 0 deletions
|
@ -24,6 +24,7 @@ import (
|
||||||
"github.com/docker/docker/container"
|
"github.com/docker/docker/container"
|
||||||
"github.com/docker/docker/daemon/config"
|
"github.com/docker/docker/daemon/config"
|
||||||
"github.com/docker/docker/daemon/initlayer"
|
"github.com/docker/docker/daemon/initlayer"
|
||||||
|
"github.com/docker/docker/errdefs"
|
||||||
"github.com/docker/docker/opts"
|
"github.com/docker/docker/opts"
|
||||||
"github.com/docker/docker/pkg/containerfs"
|
"github.com/docker/docker/pkg/containerfs"
|
||||||
"github.com/docker/docker/pkg/idtools"
|
"github.com/docker/docker/pkg/idtools"
|
||||||
|
@ -1324,12 +1325,26 @@ func (daemon *Daemon) registerLinks(container *container.Container, hostConfig *
|
||||||
}
|
}
|
||||||
child, err := daemon.GetContainer(name)
|
child, err := daemon.GetContainer(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if errdefs.IsNotFound(err) {
|
||||||
|
// Trying to link to a non-existing container is not valid, and
|
||||||
|
// should return an "invalid parameter" error. Returning a "not
|
||||||
|
// found" error here would make the client report the container's
|
||||||
|
// image could not be found (see moby/moby#39823)
|
||||||
|
err = errdefs.InvalidParameter(err)
|
||||||
|
}
|
||||||
return errors.Wrapf(err, "could not get container for %s", name)
|
return errors.Wrapf(err, "could not get container for %s", name)
|
||||||
}
|
}
|
||||||
for child.HostConfig.NetworkMode.IsContainer() {
|
for child.HostConfig.NetworkMode.IsContainer() {
|
||||||
parts := strings.SplitN(string(child.HostConfig.NetworkMode), ":", 2)
|
parts := strings.SplitN(string(child.HostConfig.NetworkMode), ":", 2)
|
||||||
child, err = daemon.GetContainer(parts[1])
|
child, err = daemon.GetContainer(parts[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if errdefs.IsNotFound(err) {
|
||||||
|
// Trying to link to a non-existing container is not valid, and
|
||||||
|
// should return an "invalid parameter" error. Returning a "not
|
||||||
|
// found" error here would make the client report the container's
|
||||||
|
// image could not be found (see moby/moby#39823)
|
||||||
|
err = errdefs.InvalidParameter(err)
|
||||||
|
}
|
||||||
return errors.Wrapf(err, "Could not get container for %s", parts[1])
|
return errors.Wrapf(err, "Could not get container for %s", parts[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,28 @@ func TestCreateFailsWhenIdentifierDoesNotExist(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestCreateLinkToNonExistingContainer verifies that linking to a non-existing
|
||||||
|
// container returns an "invalid parameter" (400) status, and not the underlying
|
||||||
|
// "non exists" (404).
|
||||||
|
func TestCreateLinkToNonExistingContainer(t *testing.T) {
|
||||||
|
skip.If(t, testEnv.DaemonInfo.OSType == "windows", "legacy links are not supported on windows")
|
||||||
|
defer setupTest(t)()
|
||||||
|
c := testEnv.APIClient()
|
||||||
|
|
||||||
|
_, err := c.ContainerCreate(context.Background(),
|
||||||
|
&container.Config{
|
||||||
|
Image: "busybox",
|
||||||
|
},
|
||||||
|
&container.HostConfig{
|
||||||
|
Links: []string{"no-such-container"},
|
||||||
|
},
|
||||||
|
&network.NetworkingConfig{},
|
||||||
|
"",
|
||||||
|
)
|
||||||
|
assert.Check(t, is.ErrorContains(err, "could not get container for no-such-container"))
|
||||||
|
assert.Check(t, errdefs.IsInvalidParameter(err))
|
||||||
|
}
|
||||||
|
|
||||||
func TestCreateWithInvalidEnv(t *testing.T) {
|
func TestCreateWithInvalidEnv(t *testing.T) {
|
||||||
defer setupTest(t)()
|
defer setupTest(t)()
|
||||||
client := testEnv.APIClient()
|
client := testEnv.APIClient()
|
||||||
|
|
Loading…
Add table
Reference in a new issue