docker run -> 'nome è già in uso dal contenitore'


387

L'esecuzione del dockerregistro con il comando seguente genera sempre un errore:

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.

Come prevenire questo errore?

Risposte:


427

Mi sono confuso anche con questo. Ci sono due comandi rilevanti qui:

docker run Esegui un comando in un nuovo contenitore

docker start Avvia uno o più container arrestati


8
Questa è la risposta che stavo cercando per rieseguire un container Docker. Grazie!
Isapir,

105
Quindi è anche importante usare docker ps -aper vedere tutti i contenitori in questo caso.
Sławosz,

9
Sì, docker start -a container-nameè il comando che puoi usare per avviare un contenitore con cui è stato creato docker run. Nota la -abandiera che è una scorciatoia per --attach. In questo modo il contenitore viene avviato in primo piano, proprio come quando si utilizza docker run(che per impostazione predefinita esegue un contenitore in primo piano).
Krzysztof Wołowski il

1
@Suncatcher Sì.
0x7d7b

1
@ eMPee584 No, perché docker create crea un contenitore ma non lo esegue.
0x7d7b

182

Ciò significa che hai già avviato un contenitore in passato con il parametro docker run --name registry-v1 ....

È necessario eliminarlo prima di poter ricreare un contenitore con lo stesso nome con docker rm registry-v1. Quando quel contenitore è in esecuzione, è necessario arrestarlo prima di poterlo eliminare con docker stop registry-v1. O semplicemente scegli un nome diverso per il nuovo contenitore.

Per ottenere un elenco di contenitori esistenti e i loro nomi semplicemente invocare docker ps -a.


4
Ma perché quelli che sono fermati per? O a cosa serve se sono ancora lì se vengono fermati?
mskw,

2
Quindi puoi eseguirli più tardi senza ricrearli
Scott Stensland,

2
Quindi in pratica stai dicendo "in modo da poter ESEGUIRE l'immagine una volta (ovvero produrre il contenitore quindi eseguire il comando al suo interno), quindi AVVIARE il contenitore tutte le volte che vuoi". Ma perché dovremmo ESEGUIRE qualcosa solo una volta? Senza nemmeno insistere sulle possibili modifiche che "qualcosa" ha apportato al contenitore (ricordate, le modifiche allo stato del contenitore della finestra mobile vanno perse se non eseguite).
Maksim Gumerov,

14
Se conosci il nome del tuo contenitore, puoi rimuoverlo usando questa scorciatoiadocker rm $(docker ps -aq --filter name=myContainerName)
Jujhar Singh,

2
@JujharSingh Perché non solo docker rm myContainerName?
Rodrigo,

153

Ecco cosa ho fatto, funziona benissimo.

passaggio 1: (elenca il contenitore finestra mobile con il suo nome)

docker ps -a

passo 2:

docker rm name_of_the_docker_container

4
Questo mi è stato utile, la "finestra mobile ps" ha involontariamente bisogno di una bandiera per restituire qualsiasi cosa.
MichaelChan,

docker ps restituisce solo i contenitori in esecuzione e necessita di -a per elencare anche quelli arrestati.
Surendra Pratap,

57

Solo per spiegare ciò che gli altri stanno dicendo (mi ci è voluto del tempo per capire) è che, semplicemente, quando vedi questo errore, significa che hai già un contenitore e quello che devi fare è eseguirlo. Mentre intuitivamente docker rundovrebbe eseguirlo, non lo fa. Il comando docker runviene utilizzato per avviare un contenitore solo per la prima volta. Per eseguire un contenitore esistente è necessario docker start $container-name. Questo per chiedere agli sviluppatori di creare comandi significativi / intuitivi.


32

Hai 2 opzioni per risolvere questo ...

  1. Rimuovere il contenitore precedente usando quel nome, con il comando docker rm $(docker ps -aq --filter name=myContainerName)

    O

  2. Rinomina il contenitore corrente con un nome diverso, ovvero cambia questa porzione --name registry-v1in qualcosa del genere --name myAnotherContainerName

Questo errore viene visualizzato perché il nome del contenitore (ovvero registry-v1) è stato utilizzato da un altro contenitore in passato ... anche se quel contenitore potrebbe essere uscito, ovvero (attualmente non in uso).


30

Quando si crea una nuova immagine, spesso si desidera eseguire un nuovo contenitore ogni volta e con lo stesso nome. Ho trovato il modo più semplice era quello di avviare il contenitore con l' opzione --rm :

--rm        Automatically remove the container when it exits

per esempio

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

Purtroppo è usato quasi a caso negli esempi dei documenti


immagine o contenitore?
Pim Heijden,

1
I contenitori vengono eseguiti dalle immagini create. Praticamente simile alla definizione di classe (immagine) e all'istanza di classe (contenitore).
Martin,

Prima dici contenitore, poi immagine. Non è chiaro Inoltre, se un contenitore per quell'immagine è già in esecuzione, rimarrà in esecuzione dopo l'uso --rm. Non si riavvia.
Pim Heijden,

4
Solo una nota: --rmfunziona solo se hai creato il contenitore usando --rmflag. Ciò significa che se hai creato il contenitore senza il --rmflag, dovrai rimuoverlo manualmente prima di poter sfruttare il vantaggio del rmflag.
Lepe

18

Causa

Un contenitore con lo stesso nome esiste ancora.

Soluzione

Per riutilizzare lo stesso nome contenitore, eliminare il contenitore esistente:

docker rm <container name>

Spiegazione

I contenitori possono esistere nei seguenti stati, durante i quali il nome del contenitore non può essere utilizzato per un altro contenitore:

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

Puoi vedere i contenitori nello runningstato usando:

docker ps

Per mostrare i contenitori in tutti gli stati e scoprire se viene preso un nome contenitore, utilizzare:

docker ps -a

Se si desidera riutilizzare il contenitore, allora --rm non è l'opzione appropriata. È sufficiente un semplice "docker start {nome contenitore}".
Ken Ingram,

11

Ecco come l'ho risolto su Ubuntu 18:

  1. $ sudo docker ps -a
  2. copia l'ID contenitore

Per ogni contenitore fare:

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

10

Puoi rimuoverlo con il comando sudo docker rm YOUR_CONTAINER_ID, quindi eseguire un nuovo contenitore con sudo docker run ...; o riavviare un contenitore esistente consudo docker start YOUR_CONTAINER_ID


7

Ho risolto il problema procedendo come segue e spero che sia di aiuto.

  1. Digitare docker ps -aper elencare tutti i contenitori nel sistema.
  2. Controllare la parte NAMES in cui è stato inizializzato il contenitore della finestra mobile.
  3. Quindi digitare docker rm --force name_of_container
  4. Installa il contenitore docker come desideri.

Ho avuto problemi con NIFI e ho rimosso e reinstallato usando la finestra mobile. In bocca al lupo.


4

Sto solo imparando la finestra mobile e anche questo mi ha preso. Ho già fermato il contenitore con quel nome e quindi ho pensato di poter eseguire un nuovo contenitore con quel nome.

Non è il caso. Solo perché il contenitore viene arrestato, non significa che non può essere riavviato e mantiene tutti gli stessi parametri con cui è stato creato (incluso il nome).

quando ho corso docker ps -a è stato quando ho visto tutti i contenitori di test fittizi che ho creato mentre giocavo.

Nessun problema, dal momento che non li voglio più, ho appena fatto docker rm containernamea quel punto il mio nuovo contenitore è stato autorizzato a funzionare con il vecchio nome.

Ah, e ora che ho finito di scrivere questa risposta, vedo il commento di Slawosz sulla risposta di Walt Howard sopra che suggerisce l'uso di docker ps -a

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.