jchysk
jchysk

Reputation: 1578

How can I run containers detached and have them automatically removed when they exit?

Why are -d and --rm conflicting arguments in Docker?

$ docker run -d --rm image
Conflicting options: --rm and -d

I have a number of containers that run unit/functional/integration tests. The Docker containers start, run the tests, and then stop. I run them detached since I only care about the results, but I'd also like the containers to be removed after the container exits. What would be a good way to do this?

Upvotes: 39

Views: 12376

Answers (2)

jchysk
jchysk

Reputation: 1578

These options no longer conflict as of Docker version 1.13.0

There was a pull request that moves the --rm option daemon-side and allows for running containers detached with the removal option: https://github.com/docker/docker/pull/20848

Upvotes: 21

Leonid Mirsky
Leonid Mirsky

Reputation: 831

Currently (Docker v1.1.1), this functionality isn't supported. The developer of the --rm feature explains the reasons for that in his PR #1589:

It's currently supported only when -d isn't provided. It doesn't make sense to automatically remove a container created via docker run -d. There are two reasons why this is implemented this way: 1) we might want to retrieve some kind of exit status or logs before removing the container 2) making this run on the server side is difficult in the current architecture.

The good news are that someone already opened an issue to fix this, so you might follow the discussion there.

Also, a workaround isn't too complicated, you can run your containers using a wrapper script as follows:

ID=$(docker run -d ubuntu sleep 3)
docker wait $ID
docker rm $ID

Upvotes: 30

Related Questions