L'exécution du registre docker
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 prévenir cette erreur?
J'ai aussi été dérouté par cela. Il y a deux commandes pertinentes ici:
docker run Exécuter une commande dans un conteneur nouvea
docker start Démarrer un ou plusieurs conteneurs arrêtés
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 portant le même nom avec docker rm registry-v1
. Lorsque ce conteneur est toujours 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
.
Voici ce que j'ai fait, ça marche bien.
docker ps -a
docker rm name_of_the_docker_container
Vous avez 2 options pour résoudre ce problème ...
Supprimer le conteneur précédent en utilisant ce nom, avec la commande docker rm $(docker ps -aq --filter name=myContainerName)
OR
--name registry-v1
en quelque chose comme --name myAnotherContainerName
Vous obtenez cette erreur parce que le nom du conteneur (i.e registry-v1
) a été utilisé par un autre conteneur dans le passé ... même si ce conteneur a déjà quitté (c'est-à-dire qu'il n'est pas utilisé).
Juste pour expliquer ce que les autres disent (cela m’a pris un peu de temps), c’est que, quand on voit cette erreur, cela signifie que vous avez déjà un conteneur et que vous devez le faire fonctionner. Bien qu'intuitivement docker run
soit supposé l'exécuter, ce n'est pas le cas. La commande docker run
sert uniquement à START un conteneur pour la toute première fois. Pour exécuter un conteneur existant, il vous faut docker start $container-name
. Voilà pour demander aux développeurs de créer des commandes significatives/intuitives.
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é le moyen le plus simple 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é presque au hasard dans les exemples de docs
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, durant 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 dans l'état running
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
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 avec Sudo docker start YOUR_CONTAINER_ID
J'apprends juste docker et cela m'a aussi. J'ai déjà arrêté le conteneur avec ce nom et par conséquent, j'ai pensé que je pourrais exécuter un nouveau conteneur avec ce nom.
Pas le cas. Le fait que le conteneur soit arrêté ne signifie pas qu'il ne peut pas être redémarré et conserve tous les paramètres avec lesquels il a été créé (y compris le nom).
quand j’ai exécuté docker ps -a
, c’est à ce moment-là que j’ai vu tous les conteneurs d’essais factices que j’ai créés en jouant.
Pas de problème, puisque je ne veux plus de ceux-là, je viens de faire docker rm containername
, moment auquel 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 suggérant l'utilisation de docker ps -a
J'ai résolu le problème en suivant les étapes et j'espère que cela aide.
docker ps -a
pour répertorier tous les conteneurs de votre système.docker rm --force name_of_container
J'ai eu un problème en utilisant NIFI et j'ai supprimé et réinstallé en utilisant docker. Bonne chance.