Merge pull request #30870 from ripcurld0/fix_msg_rm

Fix the rm error message when a container is restarting/paused
This commit is contained in:
Sebastiaan van Stijn 2017-03-10 10:04:49 +01:00 committed by GitHub
commit 6c31abde20
5 changed files with 49 additions and 5 deletions

View file

@ -191,10 +191,15 @@ RUN set -x \
&& rm -rf "$GOPATH"
# Get the "docker-py" source so we can run their integration tests
ENV DOCKER_PY_COMMIT e2655f658408f9ad1f62abdef3eb6ed43c0cf324
ENV DOCKER_PY_COMMIT 4a08d04aef0595322e1b5ac7c52f28a931da85a5
RUN git clone https://github.com/docker/docker-py.git /docker-py \
&& cd /docker-py \
&& git checkout -q $DOCKER_PY_COMMIT \
# To run integration tests docker-pycreds is required.
# Before running the integration tests conftest.py is
# loaded which results in loads auth.py that
# imports the docker-pycreds module.
&& pip install docker-pycreds==0.2.1 \
&& pip install -r test-requirements.txt
# Install yamllint for validating swagger.yaml

View file

@ -142,11 +142,15 @@ RUN set -x \
&& rm -rf "$GOPATH"
# Get the "docker-py" source so we can run their integration tests
ENV DOCKER_PY_COMMIT e2655f658408f9ad1f62abdef3eb6ed43c0cf324
ENV DOCKER_PY_COMMIT 4a08d04aef0595322e1b5ac7c52f28a931da85a5
RUN git clone https://github.com/docker/docker-py.git /docker-py \
&& cd /docker-py \
&& git checkout -q $DOCKER_PY_COMMIT \
&& pip install wheel \
# Before running the integration tests conftest.py is
# loaded which results in loads auth.py that
# imports the docker-pycreds module.
&& pip install docker-pycreds==0.2.1 \
&& pip install -r test-requirements.txt
# Install yamllint for validating swagger.yaml

View file

@ -4165,7 +4165,7 @@ paths:
$ref: "#/definitions/ErrorResponse"
examples:
application/json:
message: "You cannot remove a running container: c2ada9df5af8. Stop the container before attempting removal or use -f"
message: "You cannot remove a running container: c2ada9df5af8. Stop the container before attempting removal or force remove"
500:
description: "server error"
schema:

View file

@ -80,7 +80,12 @@ func (daemon *Daemon) rmLink(container *container.Container, name string) error
func (daemon *Daemon) cleanupContainer(container *container.Container, forceRemove, removeVolume bool) (err error) {
if container.IsRunning() {
if !forceRemove {
err := fmt.Errorf("You cannot remove a running container %s. Stop the container before attempting removal or use -f", container.ID)
state := container.StateString()
procedure := "Stop the container before attempting removal or force remove"
if state == "paused" {
procedure = "Unpause and then " + strings.ToLower(procedure)
}
err := fmt.Errorf("You cannot remove a %s container %s. %s", state, container.ID, procedure)
return apierrors.NewRequestConflictError(err)
}
if err := daemon.Kill(container); err != nil {

View file

@ -38,8 +38,10 @@ func (s *DockerSuite) TestRmContainerWithVolume(c *check.C) {
func (s *DockerSuite) TestRmContainerRunning(c *check.C) {
createRunningContainer(c, "foo")
_, _, err := dockerCmdWithError("rm", "foo")
res, _, err := dockerCmdWithError("rm", "foo")
c.Assert(err, checker.NotNil, check.Commentf("Expected error, can't rm a running container"))
c.Assert(res, checker.Contains, "cannot remove a running container")
c.Assert(res, checker.Contains, "Stop the container before attempting removal or force remove")
}
func (s *DockerSuite) TestRmContainerForceRemoveRunning(c *check.C) {
@ -83,3 +85,31 @@ func (s *DockerSuite) TestRmInvalidContainer(c *check.C) {
func createRunningContainer(c *check.C, name string) {
runSleepingContainer(c, "-dt", "--name", name)
}
// #30842
func (s *DockerSuite) TestRmRestartingContainer(c *check.C) {
name := "rst"
dockerCmd(c, "run", "--name", name, "--restart=always", "busybox", "date")
res, _, err := dockerCmdWithError("rm", name)
c.Assert(err, checker.NotNil, check.Commentf("Expected error on rm a restarting container, got none"))
c.Assert(res, checker.Contains, "cannot remove a restarting container")
c.Assert(res, checker.Contains, "Stop the container before attempting removal or force remove")
dockerCmd(c, "rm", "-f", name)
}
// #30842
func (s *DockerSuite) TestRmPausedContainer(c *check.C) {
testRequires(c, IsPausable)
name := "psd"
dockerCmd(c, "run", "--name", name, "-d", "busybox", "sleep", "1m")
dockerCmd(c, "pause", name)
res, _, err := dockerCmdWithError("rm", name)
c.Assert(err, checker.NotNil, check.Commentf("Expected error on rm a paused container, got none"))
c.Assert(res, checker.Contains, "cannot remove a paused container")
c.Assert(res, checker.Contains, "Unpause and then stop the container before attempting removal or force remove")
unpauseContainer(c, name)
dockerCmd(c, "stop", name)
dockerCmd(c, "rm", name)
}