docker run -> 'le nom est déjà utilisé par le conteneur'

387

L'exécution du dockerregistre avec la commande ci-dessous génère toujours une erreur:

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.

Comment éviter cette erreur?

Rubytastic
la source

Réponses:

428

J'ai également été confus par cela. Il existe deux commandes pertinentes ici:

docker run Exécuter une commande dans un nouveau conteneur

docker start Démarrer un ou plusieurs conteneurs arrêtés

Walt Howard
la source
8
C'est la réponse que je cherchais pour relancer un conteneur Docker. Merci!
isapir
105
Il est donc également important d'utiliser docker ps -apour voir tous les conteneurs dans ce cas.
Sławosz du
9
oui, docker start -a container-nameest la commande que vous pouvez utiliser pour démarrer un conteneur qui a été créé avec docker run. Notez le -adrapeau qui est un raccourci pour --attach. De cette façon, le conteneur est démarré au premier plan, tout comme lorsque vous utilisez docker run(qui exécute un conteneur au premier plan par défaut).
Krzysztof Wołowski
1
@Suncatcher Oui.
0x7d7b
1
@ eMPee584 Non, car docker create crée un conteneur mais ne l'exécute pas.
0x7d7b
182

Cela signifie que vous avez déjà démarré un conteneur dans le passé avec le paramètre docker run --name registry-v1 ....

Vous devez d'abord le supprimer avant de pouvoir recréer un conteneur du même nom avec docker rm registry-v1. Lorsque ce conteneur est en cours d'exécution, vous devez d'abord l'arrêter avant de pouvoir le supprimer avec docker stop registry-v1. Ou choisissez simplement un nom différent pour le nouveau conteneur.

Pour obtenir une liste des conteneurs existants et leurs noms, appelez simplement docker ps -a.

0x7d7b
la source
4
Mais pourquoi ceux qui sont arrêtés? Ou quoi de bien s'ils sont toujours là s'ils sont arrêtés?
mskw
2
Vous pouvez donc les exécuter plus tard sans les recréer
Scott Stensland
2
Vous dites donc "pour que vous puissiez exécuter l'image une fois (c'est-à-dire produire le conteneur puis y exécuter la commande), puis démarrer le conteneur autant de fois que vous le souhaitez". Mais pourquoi devrions-nous exécuter quelque chose une seule fois? Sans même persister les modifications possibles que "quelque chose" a apportées au conteneur (rappelez-vous, les modifications d'état du conteneur Docker sont perdues sauf si elles sont validées).
Maksim Gumerov
14
Si vous connaissez le nom de votre conteneur, vous pouvez le supprimer à l'aide de ce raccourcidocker rm $(docker ps -aq --filter name=myContainerName)
Jujhar Singh
2
@JujharSingh Pourquoi pas seulement docker rm myContainerName?
Rodrigo
153

Voilà ce que j'ai fait, ça marche bien.

étape 1: (il répertorie le conteneur Docker avec son nom)

docker ps -a

étape 2:

docker rm name_of_the_docker_container
Thavaprakash Swaminathan
la source
4
Cela m'a été utile, le "docker ps" a besoin de -un drapeau pour retourner quoi que ce soit.
MichaelChan
docker ps renvoie uniquement les conteneurs en cours d'exécution et a besoin de -a pour répertorier même les conteneurs arrêtés.
Surendra Pratap
57

Juste pour expliquer ce que les autres disent (il m'a fallu un certain temps pour comprendre), c'est que, simplement, lorsque vous voyez cette erreur, cela signifie que vous avez déjà un conteneur et que vous devez le faire. Bien qu'il soit intuitivement docker runcensé l'exécuter, il ne le fait pas. La commande docker runest utilisée pour DÉMARRER un conteneur uniquement pour la toute première fois. Pour exécuter un conteneur existant, vous avez besoin de docker start $container-name. Voilà pour demander aux développeurs de créer des commandes significatives / intuitives.

mithunpaul
la source
32

Vous avez 2 options pour résoudre ce problème ...

  1. Supprimer le conteneur précédent en utilisant ce nom, avec la commande docker rm $(docker ps -aq --filter name=myContainerName)

    OU

  2. Renommez le conteneur actuel sous un nom différent, c'est-à-dire changez cette partie --name registry-v1en --name myAnotherContainerName

Vous obtenez cette erreur car ce nom de conteneur (c.-à-d. registry-v1) A été utilisé par un autre conteneur dans le passé ... même si ce conteneur peut avoir quitté c.-à-d. (Actuellement non utilisé).

Edwin Ikechukwu Okonkwo
la source
30

Lorsque vous créez une nouvelle image, vous souhaitez souvent exécuter un nouveau conteneur à chaque fois et avec le même nom. J'ai trouvé que le moyen le plus simple était de démarrer le conteneur avec l' option --rm :

--rm        Automatically remove the container when it exits

par exemple

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

Malheureusement, il est utilisé de manière presque aléatoire dans les exemples de la documentation

Martin
la source
image ou conteneur?
Pim Heijden
1
Les conteneurs sont exécutés à partir d'images construites. Grosso modo similaire à la définition de classe (image) et l'instance de classe (conteneur).
Martin
Vous dites d'abord conteneur, puis image. Ce n'est pas clair. De plus, si un conteneur pour cette image est déjà en cours d'exécution, il le restera après utilisation --rm. Il ne redémarre pas.
Pim Heijden
4
Juste une note: --rmne fonctionne que si vous avez créé le conteneur à l'aide de --rmflag. Cela signifie que si vous avez créé le conteneur sans l' --rmindicateur, vous devrez le supprimer manuellement avant de pouvoir profiter de l' rmindicateur.
lepe
18

Cause

Un conteneur du même nom existe toujours.

Solution

Pour réutiliser le même nom de conteneur, supprimez le conteneur existant en:

docker rm <container name>

Explication

Les conteneurs peuvent exister dans les états suivants, pendant lesquels le nom du conteneur ne peut pas être utilisé pour un autre conteneur:

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

Vous pouvez voir les conteneurs en runningétat en utilisant:

docker ps

Pour afficher les conteneurs dans tous les états et savoir si un nom de conteneur est utilisé, utilisez:

docker ps -a
Roderick Jonsson
la source
Si l'on souhaite réutiliser le conteneur, alors --rm n'est pas le commutateur approprié. Un simple "docker start {nom du conteneur}" suffit.
Ken Ingram
11

Voici comment j'ai résolu cela sur Ubuntu 18:

  1. $ sudo docker ps -a
  2. copier l'ID du conteneur

Pour chaque conteneur:

  1. $ sudo docker stop container_ID
  2. $ sudo docker rm container_ID
Ali Faghihinia
la source
10

Vous pouvez le supprimer avec la commande sudo docker rm YOUR_CONTAINER_ID, puis exécuter un nouveau conteneur avec sudo docker run ...; ou redémarrez un conteneur existant avecsudo docker start YOUR_CONTAINER_ID

Donglei
la source
7

J'ai résolu le problème en suivant les étapes suivantes et j'espère que cela vous aidera.

  1. Tapez docker ps -apour répertorier tous les conteneurs de votre système.
  2. Vérifiez la partie NOMS où vous avez initialisé votre conteneur Docker.
  3. Tapez ensuite docker rm --force name_of_container
  4. Installez le conteneur docker comme vous le souhaitez.

J'ai eu un problème avec NIFI et j'ai supprimé et réinstallé à l'aide de docker. Bonne chance.

Nijat Mursali
la source
4

J'apprends juste le docker et cela m'a aussi. J'ai déjà arrêté le conteneur avec ce nom et j'ai donc pensé pouvoir exécuter un nouveau conteneur avec ce nom.

Pas le cas. Ce n'est pas parce que le conteneur est arrêté qu'il ne peut pas être redémarré et il conserve tous les mêmes paramètres avec lesquels il a été créé (y compris le nom).

quand j'ai couru docker ps -ac'est quand j'ai vu tous les conteneurs de test factices que j'ai créés pendant que je jouais.

Pas de problème, puisque je n'en veux plus, je viens de le faire, docker rm containernameà quel point mon nouveau conteneur a été autorisé à fonctionner avec l'ancien nom.

Ah, et maintenant que j'ai fini d'écrire cette réponse, je vois le commentaire de Slawosz sur la réponse de Walt Howard ci-dessus suggérant l'utilisation de docker ps -a

C. Tewalt
la source