docker run -> 'ім'я вже використовується контейнером'


387

Запуск 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.

Як запобігти цій помилці?

Відповіді:


427

Я також збентежився цим. Тут є відповідні дві команди:

docker run Запустити команду в новому контейнері

запуск докера Запуск одного або декількох зупинених контейнерів


8
Це відповідь, яку я шукав, щоб повторно запустити контейнер Docker. Дякую!
isapir

105
Тому також важливо використовувати docker ps -aдля перегляду всіх контейнерів у цьому випадку.
Sławosz

9
так, docker start -a container-nameце команда, з якою ви можете запустити контейнер, який було створено docker run. Зверніть увагу на -aпрапор, який є скороченим --attach. Таким чином контейнер запускається на передньому плані, як і коли ви використовуєте docker run(який запускає контейнер на передньому плані).
Кшиштоф Воловський

1
@Suncatcher Так.
0x7d7b

1
@ eMPee584 Ні, тому що docker create створює контейнер, але не запускає його.
0x7d7b

182

Це означає, що ви вже запустили контейнер раніше з параметром docker run --name registry-v1 ....

Спочатку потрібно видалити це, перш ніж ви зможете знову створити контейнер з тим самим іменем docker rm registry-v1. Коли цей контейнер працює підвіконням, його потрібно спочатку зупинити, перш ніж ви зможете його видалити docker stop registry-v1. Або просто виберіть іншу назву для нового контейнера.

Щоб отримати список існуючих контейнерів та їх назви, просто посилайтеся docker ps -a.


4
Але чому вони зупиняються? Або що добре, якщо вони все ще є, якщо їх зупиняють?
mskw

2
Тож ви можете запустити їх пізніше, не відтворюючи їх
Скотт Стенсленд,

2
Таким чином, ви в основному говорите "так, що ви можете РЕГУЛЮВАТИ зображення один раз (тобто виробляти контейнер, потім виконати команду в ньому), а потім ЗАПУСКАТИ контейнер стільки разів, скільки захочете". Але навіщо нам потрібно щось РІЗНАТИ тільки один раз? Навіть не зберігаючи можливих змін, які "щось" вносило в контейнер (пам'ятайте, зміни стану контейнера докера втрачаються, якщо їх не здійснено).
Максим Гумеров

14
Якщо ви знаєте назву свого контейнера, ви можете вилучити його за допомогою цього ярликаdocker rm $(docker ps -aq --filter name=myContainerName)
Jujhar Singh

2
@JujharSingh Чому не тільки docker rm myContainerName?
Родріго

152

Ось що я зробив, це чудово працює.

крок 1: (він перераховує контейнер докера з його назвою)

docker ps -a

крок 2:

docker rm name_of_the_docker_container

4
Це було мені корисно, "docker ps" невмисно потребує -прапор, щоб повернути що-небудь.
MichaelChan

docker ps повертає лише запущені контейнери та потребує -a для перерахування навіть зупинених.
Сурандра Пратап

57

Просто пояснити, що говорять інші (мені знадобилося певний час, щоб зрозуміти), що, просто кажучи, коли ви бачите цю помилку, це означає, що ви вже маєте контейнер, і що вам потрібно зробити, це запустити його. Хоча інтуїтивно docker runйого слід запускати, він цього не робить. Команда docker runвикористовується лише для запуску контейнера в перший раз. Щоб запустити наявний контейнер, те, що вам потрібно docker start $container-name. Стільки просити розробників створити змістовні / інтуїтивні команди.


32

У вас є два варіанти виправити це ...

  1. Видаліть попередній контейнер, використовуючи це ім'я, за допомогою команди docker rm $(docker ps -aq --filter name=myContainerName)

    АБО

  2. Перейменуйте поточний контейнер на іншу назву, тобто змініть цю частину --name registry-v1на щось подібне --name myAnotherContainerName

Ви отримуєте цю помилку, оскільки це ім'я контейнера (тобто registry-v1) використовувалось іншим контейнером у минулому ... навіть незважаючи на те, що цей контейнер, можливо, вийшов, тобто (наразі не використовується)


30

Створюючи нове зображення, ви часто хочете щоразу запускати новий контейнер і з такою ж назвою. Я знайшов найпростіший спосіб запустити контейнер з опцією --rm :

--rm        Automatically remove the container when it exits

напр

docker run --name my-micro-service --rm <image>

На жаль, він використовується майже випадковим чином у прикладах із документів


зображення чи контейнер?
Пім Хайден

1
Контейнери запускаються із вбудованих зображень. Приблизно схожий на визначення класу (зображення) та екземпляра класу (контейнер).
Мартін

Спочатку ви скажете контейнер, потім зображення. Це незрозуміло. Більше того, якщо контейнер для цього зображення вже запущений, він залишатиметься запущеним після використання --rm. Він не перезапускається.
Пім Хайден

4
Лише зауваження: --rmпрацює лише в тому випадку, якщо ви створили контейнер за допомогою --rmпрапора. Це означає, що якщо ви створили контейнер без --rmпрапора, вам доведеться його видалити вручну, перш ніж ви зможете скористатися перевагою rmпрапора.
lepe

18

Причина

Контейнер з такою ж назвою все ще існує.

Рішення

Щоб повторно використовувати те саме ім’я контейнера, видаліть існуючий контейнер:

docker rm <container name>

Пояснення

Контейнери можуть існувати в наступних станах, під час яких ім'я контейнера не можна використовувати для іншого контейнера:

  • created
  • restarting
  • running
  • paused
  • exited
  • dead

Ви можете переглянути контейнери у runningстані, скориставшись:

docker ps

Щоб показати контейнери у всіх станах та дізнатися, чи прийнято ім’я контейнера, використовуйте:

docker ps -a

Якщо ви хочете повторно використовувати контейнер, то --rm не є відповідним комутатором. Досить простого "запуску докера {ім'я контейнера}".
Кен Інграм

11

Ось як я вирішив це на ubuntu 18:

  1. $ sudo docker ps -a
  2. скопіюйте ідентифікатор контейнера

Для кожного контейнера виконайте:

  1. $ sudo docker stop container_ID
  2. $ sudo docker rm container_ID

10

Ви можете видалити його командою sudo docker rm YOUR_CONTAINER_ID, а потім запустити новий контейнер з sudo docker run ...; або перезавантажте наявний контейнер ізsudo docker start YOUR_CONTAINER_ID


7

Я вирішив це питання, зробивши наступні кроки і сподіваюся, що це допоможе.

  1. Тип docker ps -a список усіх контейнерів у вашій системі.
  2. Перевірте частину NAMES, де ви ініціалізували контейнер докера.
  3. Потім введіть docker rm --force name_of_container
  4. Встановіть контейнер докера за вашим бажанням.

У мене виникли проблеми з використанням NIFI, і я видалив і перевстановив за допомогою docker. Удачі.


4

Я просто навчаюсь докеру, і це мене також отримало. Я вже зупинив контейнер з цим ім'ям, і тому думав, що можу запустити новий контейнер з цим ім'ям.

Не справа. Тільки тому, що контейнер зупинений, не означає, що його неможливо запустити заново, і він зберігає всі ті ж параметри, з яких він був створений (включаючи ім'я).

коли я бігав docker ps -a , саме тоді я побачив усі контейнери для тестування манекенів, які я створив, коли я грав.

Немає проблем, оскільки я більше не хочу тих, що я просто зробив, коли docker rm containernameв мій новий контейнер було дозволено працювати зі старою назвою.

Ага, і тепер, коли я закінчую писати цю відповідь, я бачу коментар Славоша щодо відповіді Уолта Говарда вище, що пропонує використання docker ps -a

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.