docker-compose: option to automaticaly remove container after run in docker-compose.yml
The docker-compose run
reference states that it has the --rm
option to
Remove container after run.
I want to make this a default run
behavior for some of services I specify in docker-compose.yml
.
So, the questions are:
- Can it somehow be specified in
docker-compose.yml
? - If it can, how can I do that?
(INB4 "Use bash aliases, Luke!": Of course I can enforce this outside of docker-compose.yml
by setting some bash alias like alias docker-compose-run='docker-compose run --rm'
but I'm interested in how can I enforce that exactly through docker-compose.yml
, not in some extrnal way.)
TLDR: It's still not possible 2018-11; use docker-compose down
or docker-compose run --rm
I want to give an updated answer to this question because it's almost 3 years later. This will save others some searching.
I had the same question and here are the workarounds I found (including the one from the question itself):
docker-compose down
which does the following:
Stops containers and removes containers, networks, volumes, and images created by up.
By default, the only things removed are:
- Containers for services defined in the Compose file - Networks defined in the networks section of the Compose file - The default network, if one is used
Networks and volumes defined as external are never removed.
Although you cannot declare it in docker-compose.yml
it will safe you some hassle; especially with volumes and networks.
docker-compose run --rm
--rm - Remove container after run. Ignored in detached mode.
Runs a one-time command against a service. For example, the following command starts the web service and runs bash as its command.
docker-compose run web bash
[...] the command passed by run overrides the command defined in the service configuration.
[...] the command does not create any of the ports specified in the service configuration. This prevents port collisions with already-open ports. If you do want the service’s ports to be created and mapped to the host, specify the --service-ports flag
docker-compose rm -f
-f, --force Don't ask to confirm removal
It's not part of the Dockerfile
or docker-compose.yml
spec, it is only a cli option for the run command, so the answer is no. You will need to rely on something external for enforcing.
If you got some build tool for your project it is usually best to wrap docker-compose tasks with that. For example our gradle projects provide docker related tasks that set some default options like --rm
for run tasks.