Docker. oci runtime error: container with id exists

После обновления Docker контейнер может перестать запускаться и начнёт возвращать ошибку «Exited (128)». Это может быть связано с тем, что в памяти остались файлы конфига запущенного контейнера. Их надо удалить вручную.

После обновления docker иногда бывают ситуации, когда контейнер не хочет запускаться, а в логах появилось сообщение:

level=error msg=»Create container failed with error: oci runtime error: container with id exists id_контейнера

Как было правильно замечено в интернете, такая ошибка иногда лечится полной перезагрузкой сервера. Но этот вариант слишком радикальный. Часто проблема решается простым удалением файлов временных конфигов.

Для решения проблемы сначала запомните id контейнера, который не запускается. Посмотреть id можно в первом столбце вывода:

docker ps -a

Затем необходимо остановить службу docker:

systemctl stop docker

Теперь найдём в папке /run/ и /var/run/ все папки, относящиеся к контейнеру:

find /run/ -name ‘id_контейнера*’

Так как docker выключен, то результатов не должно быть. Но из-за некорректного завершения работы docker в прошлом, во время обновления, будут присутствовать некоторые файлы, которые могут находиться в папках:

/run/runc/id_контейнера

/run/containerd/id_контейнера

/var/run/docker/runtime-runc/moby/id_контейнера

Можно удалить полностью эти папки. Но если сомневаетесь, то просто переименуйте их. К примеру, так:

mv /run/runc/id_контейнера /run/runc/backup_id_контейнера

Затем запустите docker обратно:

systemctl start docker

И проверьте, что контейнер запустился успешно:

docker ps -a

Как сказал ранее, вместо всех этих действий можно просто перезапустить сервер. Потому что папка /run/ находится не на диске, а в оперативной памяти. Она будет полностью очищена при выключении.



2022-03-04T13:10:15
Интернет