Не удалось удалить остановленный контейнер Docker - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь принудительно остановить и удалить все образы Docker:

docker stop $(docker ps -a -q) && docker rm -f $(docker ps -a -q) && docker rmi -f $(docker images -a -q)

Однако я получаю:

Error response from daemon: conflict: unable to delete 3b5b05d98767 (cannot be forced) - image is being used by running container deedefb82e27.

Насколько я понимаю, контейнер перезапускается быстрее, чем команда пытается его удалить.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Ошибка в удалении изображения, а не контейнера. Это либо состояние гонки из-за того, что контейнер еще не полностью удален, либо у вас есть что-то еще, запускающее контейнеры в системе, например режим роя.

Для состояния гонки просто добавьте несколько секунд между командами, чтобы дать rm время для завершения на сервере. Также нет необходимости в остановке, так как вы делаете rm -f:

docker rm -f $(docker ps -a -q) \
&& sleep 2 && docker rmi -f $(docker images -a -q)

Если у вас есть контейнеры, работающие в режиме роя, сначала удалите стеки и службы, которые вы не хотите запускать:

# something like this, will only work if you have stacks defined
docker stack rm $(docker stack ls --format '{{.Name}}')

# similar command for services
docker service rm $(docker service ls -q)

Каждому из них может потребоваться 10 секунд для выхода из контейнеров, плюс еще несколько секунд для менеджера роя, чтобы отправить команду, поэтому вы можете захотеть получить sleep 15 после того, как они оба вернутся, чтобы дать серверу время для завершения запрос.

0 голосов
/ 11 мая 2018

Возможно, вам придется предварять все ваши команды sudo или убедиться, что вы уже находитесь в корневой оболочке.

Например:

sudo docker stop $(sudo docker ps -a -q) && sudo docker rm -f $(sudo docker ps -a -q) && sudo docker rmi -f $(sudo docker images -a -q)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...