To expand on @linux_fan's answer, there is no direct way to perform a down without a docker compose file.
There are two somewhat feasible solutions, which could work, but both come with there limitations:
1: Remove via Container Name Prefix
Important: If you gave a container a custom name, those containers must be removed manually, as they do not contain the prefix.
This method is a variation of linux-fan's solution, but replaces grep with the -f
option. You can find where docker believes the docker-compose.yml file to be via docker compose ls
. There, in the column name
, you will also see the prefix given to each container spawned by Docker Compose.
- Stop the containers
docker container stop $(docker ps -q -f name=<DOCKER_COMPOSE_PREFIX>)
- Remove the containers
docker container rm $(docker ps -a -q -f name=<DOCKER_COMPOSE_PREFIX>)
- Remove the Network:
docker network rm $(docker network ls -q -f name=<DOCKER_COMPOSE_PREFIX>)
- Remove any Volumes:
docker volume rm $(docker volume ls -q -f name=<DOCKER_COMPOSE_PREFIX>)
Explanation
docker ps
prints out all running containers
-q
prints out only id's
-a
prints out all containers, regardless if running or not
-f
filters out so only ids with the prefix in it's name is printed
2: Remove via Network
You could also remove via taking a look at the network the docker compose file spawned. By default, docker compose spawns a network in which all containers are kept.
Warning: This method will shut down any containers that are part of the network (e.g. if you for some reason manually added a different container to the docker compose generated network)
docker network ls -q -f name=<DOCKER_COMPOSE_PREFIX>
docker network inspect <YOUR_DOCKER_COMPOSE_NETWORK_ID>
- Find the
Containers
dictionary
- Stop and Remove all containers found in this list via
docker container stop <CONTAINTER_ID>
and docker container rm <CONTAINTER_ID>
This method should catch any containers that have custom names, but are still in the default docker compose network.
Note that this is a very manual procedure, however you probably should be able to generate a bash script via ChatGPT that automates this.