У меня есть скрипт, который останавливает контейнеры, а затем удаляет их
docker stop $(docker ps -q)
docker rm $(docker ps -a -q)
Но я не хочу удалять контейнер док-станции с именем "my_docker".
Как я могу удалить все контейнеры, кроме этого?
У меня есть скрипт, который останавливает контейнеры, а затем удаляет их
docker stop $(docker ps -q)
docker rm $(docker ps -a -q)
Но я не хочу удалять контейнер док-станции с именем "my_docker".
Как я могу удалить все контейнеры, кроме этого?
Вы можете попробовать это, что будет
grep -v
), а затемЗапустите эту команду:
docker rm $(docker ps -a | grep -v "my_docker" | awk 'NR>1 {print $1}')
Чтобы использовать cut
вместо awk
, попробуйте следующее:
docker rm $(docker ps -a | grep -v "my_docker" | cut -d ' ' -f1)
Примеры использования awk
/cut
здесь: bash: кратчайший способ получить n-й столбец вывода
Название вопроса задает изображения, а не контейнеры. Для тех, кто наткнулся на этот вопрос, глядя на удалить все изображения, кроме одного, вы можете использовать docker prune вместе с флажками фильтра:
docker image prune -a --force --filter "label!=image_name"
заменив имя_файла именем вашего изображения.
Вы также можете использовать флаг "до =", чтобы обрезать изображения по дате.
Это то, что на самом деле происходит docker rm $(List of container Ids)
. Так что это просто вопрос о том, как вы можете отфильтровать список идентификаторов контейнера.
Например: Если вы хотите удалить весь контейнер, но один с конкретным идентификатором контейнера, то этот docker rm $(docker ps -a -q | grep -v "my_container_id")
выполнит трюк.
Я бы предпочел проверить имя контейнера, используя что-то вдоль строк (untested)
docker inspect --format '{{ .Name }}' $(docker ps -aq)
это даст имена контейнеров (работающих или нет), и вы можете фильтровать и
docker rm
используя эту информацию
Старый вопрос, но мне нравится оживлять сообщения.
В таком случае вы можете использовать Spotify Docker GC: https://github.com/spotify/docker-gc#excluding-containers-from-garbage-collection
Вы можете сделать:
echo "my_docker" >> /tmp/docker-gc-exclude-containers
echo '*' > /tmp/docker-gc-exclude
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc:ro -v /tmp/docker-gc-exclude-containers:/etc/docker-gc-exclude-containers:ro -v /tmp/docker-gc-exclude:/etc/docker-gc-exclude:ro spotify/docker-gc
(если вы хотите, чтобы ваши изображения были очищены тоже, вы можете избежать установки файла docker-gc-exclude
)
Чтобы остановить
docker stop $(docker ps -a -q | grep -v "my_container_id")
Удалить
docker rm $(docker ps -a -q | grep -v "my_container_id")
Я достиг этого с помощью следующей команды:
docker image rm -f $(docker images -a | grep -v "image_repository_name" | awk 'NR>1 {print $1}')