Docker how to remove container
Docker how to remove container
Как удалить контейнеры, образы, тома и сети Docker
Docker — это платформа для контейнеризации с открытым исходным кодом, которая позволяет быстро создавать, тестировать и развертывать приложения в виде переносимых контейнеров, которые могут работать практически где угодно.
При работе с Docker вы можете быстро накопить большое количество неиспользуемых объектов, которые занимают значительное дисковое пространство и загромождают вывод, производимый командами Docker. Docker не удаляет неиспользуемые объекты, такие как контейнеры, изображения, тома и сети, если вы явно не укажете ему это сделать.
Эта статья служит «шпаргалкой», чтобы помочь пользователям Docker поддерживать порядок в своей системе и освобождать дисковое пространство, удаляя неиспользуемые контейнеры Docker, образы, тома и сети.
Удаление всех неиспользуемых объектов Docker
Команда docker system prune удаляет все остановленные контейнеры, зависшие образы и неиспользуемые сети:
Вам будет предложено подтвердить операцию:
Удаление контейнеров Docker
Удаление одного или нескольких контейнеров
Результат должен выглядеть примерно так:
Если вы получили сообщение об ошибке, подобное показанному ниже, это означает, что контейнер запущен. Вам нужно будет остановить контейнер, прежде чем снимать его.
Удаление всех остановленных контейнеров
Чтобы удалить все остановленные контейнеры, вызовите команду docker container prune :
Удаление контейнеров с помощью фильтров
Например, чтобы удалить все изображения, созданные более 12 часов назад, вы должны запустить:
Остановите и удалите все контейнеры
Чтобы остановить все запущенные контейнеры, введите команду docker container stop а затем идентификаторы контейнеров:
Удаление образов Docker
Когда вы загружаете образ Docker, он сохраняется на сервере, пока вы не удалите его вручную.
Удаление одного или нескольких изображений
Чтобы удалить один или несколько образов Docker, сначала вам нужно найти идентификаторы образов:
Результат должен выглядеть примерно так:
Если вы получили сообщение об ошибке, подобное приведенному ниже, это означает, что существующий контейнер использует изображение. Чтобы удалить изображение, вам сначала нужно удалить контейнер.
Удаление болтающихся изображений
Docker предоставляет команду удаления docker image prune которую можно использовать для удаления оборванных и неиспользуемых образов.
Оборванное изображение — это изображение, которое не помечено и не используется никаким контейнером. Чтобы удалить болтающиеся изображения, введите:
Удаление всех неиспользуемых изображений
Удаление изображений с помощью фильтров
Например, чтобы удалить все изображения, созданные более семи дней (168 часов) назад, вы должны запустить:
Удаление томов Docker
Удаление одного или нескольких томов
Чтобы удалить один или несколько томов Docker, запустите команду docker volume ls чтобы найти ID томов, которые вы хотите удалить.
Результат должен выглядеть примерно так:
Если вы получаете сообщение об ошибке, подобное показанной ниже, это означает, что существующий контейнер использует том. Чтобы удалить объем, вам сначала нужно удалить емкость.
Удаление всех неиспользуемых томов
Чтобы удалить все неиспользуемые тома, выполните команду docker image prune :
Удаление сетей Docker
Удаление одной или нескольких сетей
Чтобы удалить одну или несколько сетей Docker, используйте команду docker network ls чтобы найти идентификаторы сетей, которые вы хотите удалить.
Результат должен выглядеть примерно так:
Если вы получаете сообщение об ошибке, подобное показанной ниже, это означает, что существующий контейнер использует сеть. Чтобы удалить сеть, вы должны сначала удалить контейнер.
Удаление всей неиспользуемой сети
Используйте команду docker network prune чтобы удалить все неиспользуемые сети.
Вам будет предложено продолжить:
Удаление сетей с помощью фильтров
Например, чтобы удалить все сети, созданные более 12 часов назад, запустите:
Выводы
Мы показали вам некоторые из распространенных команд для удаления контейнеров, образов, томов и сетей Docker.
Если у вас есть вопросы, оставьте комментарий ниже.
How to remove old Docker containers
Maybe there is a directory in which these containers are stored where I can delete them easily manually?
50 Answers 50
There is a new feature in Docker 1.13.x called Docker container prune: docker container prune This will do what you want and should work on all platforms the same way.
There is also a Docker system prune, which will clean up containers, images, volumes, and networks all in one command.
Original Answer:
There has been some talk about a Docker cleanup command. You can find the information on this ticket: https://github.com/dotcloud/docker/issues/928
Until that command is available, you can string Docker commands together with other Unix commands to get what you need. Here is an example on how to clean up old containers that are weeks old:
Another method, which I got from Guillaume J. Charmes (credit where it is due):
will remove all containers in an elegant way.
And by Bartosz Bilicki, for Windows:
An update with Docker 1.13 (Q4 2016), credit to VonC (later in this thread):
docker system prune will delete ALL unused data (i.e., in order: containers stopped, volumes without containers and images with no containers).
See PR 26108 and commit 86de7c0, which are introducing a few new commands to help facilitate visualizing how much space the Docker daemon data is taking on disk and allowing for easily cleaning up «unneeded» excess.
Updated Answer Use docker system prune or docker container prune now. See VonC’s updated answer: https://stackoverflow.com/a/39860665/411229
Previous Answer Composing several different hints above, the most elegant way to remove all non-running containers seems to be:
We have discussed this before and prefer users to use the above line without having to add additional code to Docker.
It is now possible to use filtering with docker ps :
Here’s a cleaner script to add in your
Edit: As noted below, original answer was for removing images, not containers. Updated to answer both, including new links to documentation. Thanks to Adrian (and Ryan’s answer) for mentioning the new ps filtering.
With Docker 1.13 (Q4 2016), you now have:
docker system prune will delete ALL unused data (i.e., in order: containers stopped, volumes without containers and images with no containers).
See PR 26108 and commit 86de7c0, which are introducing a few new commands to help facilitate visualizing how much space the Docker daemon data is taking on disk and allowing for easily cleaning up «unneeded» excess.
Introduced in commit 913e5cb, only for Docker 1.13+.
UPDATED 2017 (NEWEST)
To remove ALL STOPPED CONTAINERS
To remove ALL CONTAINERS (STOPPED AND NON STOPPED)
Remove all stopped containers:
From the comment by pauk960:
Remove containers created before an other container
Another example. You have your database already running on a docker container. You have developed your application to run on an other container and now You have a number of unneeded containers.
Remove containers created after a certain container
Docker stores containers in /var/lib/docker/containers in Ubuntu. I think extra containers do no other harm, but take up disk space.
Update: As of Docker version 1.13 (released January 2017), you can issue the following command to clean up stopped containers, unused volumes, dangling images and unused networks:
If you want to insure that you’re only deleting containers which have an exited status, use this:
Similarly, if you’re cleaning up docker stuff, you can get rid of untagged, unnamed images in this way:
Here is my docker-cleanup script, which removes untagged containers and images. Please check the source for any updates.
First, stop running containers before attempting to remove them
Remove Running containers
Note: Trying to stop a container will give you an error:
Error: Impossible to remove a running container, please stop it first
Remove All containers
Removing all containers from Windows shell:
Docker cleanup
A tiny all-in-one shell, which removes:
Intend to run as a crontab job
Feature
It forcefully stops and removes all containers present locally.
So, personally I recommend doing this as part of your deploy script for both images and containers keeping only the most recent n containers and images. I tag my docker images with the same versioning schema I use with git tag as well as always tagging the latest docker image with «latest.» This means that without cleaning up anything, my docker images wind up looking like:
Now, of course I don’t want to keep all my images (or containers) going back to perpetuity on all my production boxes. I just want the last 3 or 4 for rollbacks and to get rid of everything else. Unix’s tail is your best friend here. Since docker images and docker ps both order by date, we can just use tail to select all but the top 3 and remove them:
Run that along with your deploy scripts (or locally) to always keep just enough images to comfortably roll back without taking up too much room or cluttering stuff up with old images.
Personally, I only keep one container on my production box at any time, but you can do the same sort of thing with containers if you want more:
Finally, in my simplified example we’re only dealing with one repo at a time, but if you had more, you can just get a bit more sophisticated with the same idea. Say I just want to keep the last 3 images from some_repo/some_image. I can just mix in grep and awk and be on my way:
Again, same idea applies to containers, but you get it by this point so I’ll stop giving examples.
How To Remove Unused Docker Images, Containers, Volumes, and Networks
This tutorial is going to cover how to remove unused Docker images, containers, volumes, and networks.
1. Remove Docker Images
1.1. List All Docker Images
Before removing a Docker image, we have to know its name or id first. And we can use the docker images command to list all Docker images in our environment. Let’s refer to another tutorial for more basic Docker commands.
To list all Docker images:
To list all Docker images including intermediate images:
1.2. Remove One or More Docker Images
1.2.1. Using the docker image rm command
To remove one ore more Docker images, we can use the docker image rm command which has the syntax as the following:
Let’s see an example which we will remove two Docker images hello-world and alpine:
1.2.2. Using the docker rmi command
We can use the docker rmi, another Docker command to remove one or more Docker images. And the command has syntax as the following:
Some options of the command:
1.3. Remove Unused Docker Images
To remove unused Docker images, we can use the docker image prune command which has the syntax as the following:
Some options of the command:
By default, the command just removes all dangling Docker images which are layers that have no relationship to any tagged images. By adding the -a option to the command, we can delete all used Docker images.
Let’s see the following example which we are going to delete all unused Docker images, not just dangling ones:
Prune unused Docker objects
Estimated reading time: 5 minutes
Docker takes a conservative approach to cleaning up unused objects (often referred to as “garbage collection”), such as images, containers, volumes, and networks: these objects are generally not removed unless you explicitly ask Docker to do so. This can cause Docker to use extra disk space. For each type of object, Docker provides a prune command. In addition, you can use docker system prune to clean up multiple types of objects at once. This topic shows how to use these prune commands.
Prune images
The docker image prune command allows you to clean up unused images. By default, docker image prune only cleans up dangling images. A dangling image is one that is not tagged and is not referenced by any container. To remove dangling images:
Other filtering expressions are available. See the docker image prune reference for more examples.
Prune containers
Other filtering expressions are available. See the docker container prune reference for more examples.
Prune volumes
Volumes can be used by one or more containers, and take up space on the Docker host. Volumes are never removed automatically, because to do so could destroy data.
Other filtering expressions are available. See the docker volume prune reference for more examples.
Prune networks
Docker networks don’t take up much disk space, but they do create iptables rules, bridge network devices, and routing table entries. To clean these things up, you can use docker network prune to clean up networks which aren’t used by any containers.
Other filtering expressions are available. See the docker network prune reference for more examples.
Prune everything
Как удалить все контейнеры Docker, образы, тома и сети
Docker позволяет быстро создавать, тестировать и развертывать приложения как портативные самостоятельные контейнеры, которые могут работать практически в любой системе.
Docker не удаляет неиспользуемые объекты, такие как контейнеры, образы, тома и сети, если вы явно не скажете ему об этом. При работе с Docker можно легко накопить большое количество мусорных объектов, которые занимают много места на диске и размешивают данные, создаваемые командами Docker.
Это руководство служит «шпаргалкой», чтобы помочь пользователям Docker сохранить свою систему организованной и освободить место на диске, удалив все неиспользуемые контейнеры Docker, образы, тома и сети.
Удаляем все неиспользуемые объекты
Команда docker system prune удалит остановленные контейнеры, все висячие образы и все неиспользуемые сети:
Удаление контейнеров Docker
Контейнеры Docker не удаляются автоматически при их остановке, если вы специально не указали флаг —rm при его запуске.
Удаляем один или несколько контейнеров
В качестве результата выполнения этой команды вы должны увидеть такую таблицу:
Как только вы нашли необходимый идентификатор контейнера, который хотите удалить, передайте его имя команде docker container rm. Например, чтобы удалить первые два контейнера, перечисленных выше выполните команду:
Если вы получаете сообщение об ошибке, подобное приведенному ниже, это означает, что контейнер все еще работает. Перед удалением контейнера, его необходимо остановить.
Error response from daemon: You cannot remove a running container fc983ebf4771d42a8bd0029df061cb74dc12cb174530b2036987575b83442b47. Stop the container before attempting removal or force remove.
Удалить все остановленные контейнеры
Перед выполнением команды можно получить список всех неиспользуемых (остановленных) контейнеров, с помощью следующей команды:
Чтобы удалить все остановленные контейнеры, используйте команду docker container prune:
Вам будет предложено продолжить, используйте флаг-for —force, чтобы пропустить этот вопрос.
Удаляем контейнер используя фильтр
Команда docker container prune позволяет удалить контейнеры в зависимости от их состояния, используя флаг фильтрации —filter. На момент написания этой статьи дополнительно поддерживаются фильтры until и label. Вы можете использовать более одного фильтра, передавая несколько флагов —filter.
Например, чтобы удалить все образы, созданные более 12 часов назад, запустите:
Остановить и удалить все контейнеры
После остановки всех контейнеров их можно удалить. Используя команду docker container stop, за которой следует список идентификаторов контейнеров попробуем сделать это:
Как удалить образы Docker
Для удаления одного или нескольких образов Docker используйте команду docker images ls, чтобы найти идентификатор(ID) образа, который нужно удалить.
Вывод должен выглядеть примерно так:
Как только вы найдете образы, которые хотите удалить, передайте их идентификаторы команде docker image rm. Например, чтобы удалить первые два образа, перечисленные в выходных данных выше выполните:
Если вы получите ошибку, подобную следующей, это означает, что образ используется контейнером. Чтобы удалить образ, нужно сначала удалить контейнер.
Error response from daemon: conflict: unable to remove repository reference «centos» (must force) — container cd20b396a061 is using its referenced image 75835a67d134
Удаляем висящие и неиспользуемые образы
Docker имеет команду docker image prune, которая может использоваться для удаления висячих и неиспользуемых образов. Висячий образ — это такой образ, который не отмечен и не используется ни одним контейнером. Для удаления висячих изображений введите:
Удаляем образы используя фильтры
С помощью команды docker image prune можно удалить образы используя определенные условия с помощью флага фильтрации —filter.
На момент написания этой статьи в настоящее время поддерживаются фильтры until и label. Вы можете использовать более одного фильтра, передавая несколько флагов —filter.
Например, чтобы удалить все изображения, созданные более 6 минут назад, запустите:
Удаление Docker томов
Удалить один или несколько томов
Для начала, используйте команду docker volume ls для поиска идентификатора томов. Это необходимо чтобы удалить один или несколько томов Docker.
Результат выполнения команды должен выглядеть примерно так:
Теперь выберите имя или несколько имен томов, которые вы хотите удалить и передайте их в команду docker volume rm. Например, чтобы удалить первый том, указанный в выводе выше выполните:
Если вы получаете ошибку, подобную следующей, это означает, что выбранный том используется существующим контейнером. Чтобы удалить том, придется сначала удалить контейнер.
Error response from daemon: remove 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163: volume is in use — [c7188935a38a6c3f9f11297f8c98ce9996ef5ddad6e6187be62bad3001a66c8e]
Удалить неиспользуемые тома
Для удаления всех неиспользуемых томов существует команда docker volume prune:
Удаление сети Docker
Одна или несколько сетей
Перед удалением одной или нескольких сетей Docker используйте команду docker network ls, чтобы найти идентификатор сетей, которые хотите удалить.
Результат должен быть примерно таким:
После обнаружения названия сетей, передайте их идентификатор сети команде docker network rm. Например, чтобы удалить сеть с именем my-abuzov-network выполните:
Если вы получаете ошибку, подобную следующей, это означает, что сеть используется существующим контейнером. Чтобы удалить сеть, вам придется сначала удалить контейнер.
Error response from daemon: network my-abuzov-network id 6f5293268bb91ad2498b38b0bca970083af87237784017be24ea208d2233c5aa has active endpoints
Удалить неиспользуемую сеть
Используйте команду docker network prune для удаления всех неиспользуемых сетей.
Удалить сети с помощью фильтров
С помощью команды docker network prune можно удалить сети по условиям, используя флаг фильтрации —filter.
На момент написания этой статьи в настоящее время поддерживаются фильтры until и label. Вы можете использовать более одного фильтра, передавая несколько флагов —filter.
Например, чтобы удалить все сети, созданные более 5 часов назад, запустите:
В этом руководстве мы показали вам некоторые общие команды для удаления контейнеров Docker, образов, томов и сетей.
Рекомендуем дополнительно проверить официальную документацию Docker. Если у вас возникли вопросы, пожалуйста, оставьте комментарий ниже.