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.