Ответ 1
Я тоже смутился этим. Здесь есть две команды:
docker run Запустите команду в контейнере new
запуск докеров Запуск одного или нескольких остановленных контейнеров
Запуск реестра docker
с помощью команды ниже всегда выдает ошибку:
dev:tmp me$ docker run \
-d --name registry-v1 \
-e SETTINGS_FLAVOR=local \
-e STORAGE_PATH=/registry \
-e SEARCH_BACKEND=sqlalchemy \
-e LOGLEVEL=DEBUG \
-p 5000:5000 \
registry:0.9.1
Error response from daemon: Conflict. The name "registry-v1" is already in use by container f9e5798a82e0. You have to delete (or rename) that container to be able to reuse that name.
Как предотвратить эту ошибку?
Я тоже смутился этим. Здесь есть две команды:
docker run Запустите команду в контейнере new
запуск докеров Запуск одного или нескольких остановленных контейнеров
Это означает, что вы уже начали контейнер в прошлом с параметром docker run --name registry-v1 ...
.
Вам нужно удалить это прежде, чем вы сможете повторно создать контейнер с тем же именем с помощью docker rm registry-v1
. Когда этот контейнер работает на пороге, вам нужно сначала его остановить, прежде чем вы сможете удалить его с помощью docker stop registry-v1
. Или просто выберите другое имя для нового контейнера.
Чтобы получить список существующих контейнеров и их имена, просто вызовите docker ps -a
.
Вот что я сделал, все работает отлично.
docker ps -a
docker rm name_of_the_docker_container
Просто чтобы объяснить, что говорят другие (мне потребовалось некоторое время, чтобы понять), проще говоря, когда вы видите эту ошибку, это означает, что у вас уже есть контейнер, и вам нужно его запустить. Интуитивно docker run
должен его запускать, но это не так. Команда docker run
используется только для START контейнера в первый раз. Для запуска существующего контейнера вам нужно docker start $container-name
. Так много для того, чтобы попросить разработчиков создавать значимые/интуитивно понятные команды.
У вас есть 2 варианта исправить это...
Удалите предыдущий контейнер, используя это имя, с помощью команды docker rm $(docker ps -aq --filter name=myContainerName)
ИЛИ ЖЕ
--name registry-v1
на что-то вроде --name myAnotherContainerName
Вы получаете эту ошибку, потому что это имя контейнера (т. registry-v1
) использовалось другим контейнером в прошлом... даже если этот контейнер мог завершиться, т.е. (В настоящее время не используется).
Когда вы создаете новый образ, вам часто хочется каждый раз запускать новый контейнер с тем же именем. Я обнаружил, что проще всего запустить контейнер с опцией --rm:
--rm Automatically remove the container when it exits
например
docker run --name my-micro-service --rm <image>
К сожалению, это использовалось почти случайно в примерах из документов
причина
Контейнер с тем же именем все еще существует.
Решение
Чтобы повторно использовать то же имя контейнера, удалите существующий контейнер:
docker rm <container name>
объяснение
Контейнеры могут существовать в следующих состояниях, во время которых имя контейнера нельзя использовать для другого контейнера:
created
restarting
running
paused
exited
dead
Вы можете увидеть контейнеры в running
состоянии, используя:
docker ps
Чтобы показать контейнеры во всех состояниях и узнать, занято ли имя контейнера, используйте:
docker ps -a
Вы можете удалить его с помощью команды sudo docker rm YOUR_CONTAINER_ID
, а затем запустить новый контейнер с помощью sudo docker run...
; или перезапустите существующий контейнер с помощью sudo docker start YOUR_CONTAINER_ID
Я только учусь докеру, и это меня тоже достало. Я уже остановил контейнер с таким именем и поэтому подумал, что смогу запустить новый контейнер с этим именем.
Не тот случай. Тот факт, что контейнер остановлен, не означает, что он не может быть запущен снова, и он сохраняет все те же параметры, с которыми он был создан (включая имя).
когда я запускал docker ps -a
то, когда я видел все фиктивные тестовые контейнеры, я создавал их во время игры.
Нет проблем, так как я больше не хочу их, я просто сделал docker rm containername
после чего моему новому контейнеру разрешили работать со старым именем.
Ах, и теперь, когда я заканчиваю писать этот ответ, я вижу комментарий Славоша к ответу Уолта Ховарда выше, предлагающий использовать docker ps -a
Я решил проблему, выполнив следующие шаги, и я надеюсь, что это поможет.
docker ps -a
, чтобы получить список всех контейнеров в вашей системе.docker rm --force name_of_container
У меня были проблемы с использованием NIFI, и я удалил и переустановил с помощью Docker. Удачи.