docker run -> 'nama sudah digunakan oleh kontainer'

387

Menjalankan dockerregistri dengan perintah di bawah ini selalu menimbulkan kesalahan:

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.

Bagaimana cara mencegah kesalahan ini?

Rubytastic
sumber

Jawaban:

427

Saya juga bingung dengan hal ini. Ada dua perintah yang relevan di sini:

buruh pelabuhan menjalankan. Menjalankan perintah dalam wadah baru

buruh pelabuhan mulai Memulai satu atau lebih kontainer berhenti

Walt Howard
sumber
8
Ini adalah jawaban yang saya cari untuk menjalankan kembali wadah Docker. Terima kasih!
isapir
105
Jadi, penting juga untuk menggunakan docker ps -asemua wadah dalam hal ini.
Sławosz
9
ya, docker start -a container-nameadalah perintah yang dapat Anda gunakan untuk memulai wadah yang telah dibuat docker run. Perhatikan -abendera yang merupakan singkatan --attach. Dengan cara ini wadah dimulai di latar depan, sama seperti ketika Anda menggunakan docker run(yang menjalankan wadah di latar depan secara default).
Krzysztof Wołowski
1
@ Suncatcher Ya.
0x7d7b
1
@ eMPee584 Tidak, karena docker create membuat wadah tetapi tidak menjalankannya.
0x7d7b
182

Itu berarti Anda telah memulai sebuah wadah di masa lalu dengan parameter docker run --name registry-v1 ....

Anda harus menghapusnya terlebih dahulu sebelum dapat membuat ulang wadah dengan nama yang sama docker rm registry-v1. Ketika wadah itu masih berjalan, Anda harus menghentikannya terlebih dahulu sebelum Anda bisa menghapusnyadocker stop registry-v1 . Atau cukup pilih nama yang berbeda untuk wadah baru.

Untuk mendapatkan daftar kontainer yang ada dan nama mereka cukup memanggil docker ps -a.

0x7d7b
sumber
4
Tetapi mengapa orang-orang yang berhenti untuk? Atau apa gunanya jika mereka masih di sana jika mereka dihentikan?
mskw
2
Jadi Anda dapat menjalankannya nanti tanpa membuatnya ulang
Scott Stensland
2
Jadi Anda pada dasarnya mengatakan "sehingga Anda dapat MENJALANKAN gambar sekali (yaitu menghasilkan wadah kemudian jalankan perintah di dalamnya), kemudian MULAI wadah sebanyak yang Anda inginkan". Tapi mengapa kita perlu menjalankan sesuatu sekali saja? Tanpa bertahan dengan kemungkinan perubahan yang dilakukan "sesuatu" pada wadah (ingat, perubahan kondisi wadah buruh pelabuhan hilang kecuali dilakukan).
Maksim Gumerov
14
Jika Anda tahu nama wadah Anda, Anda dapat menghapusnya menggunakan pintasan inidocker rm $(docker ps -aq --filter name=myContainerName)
Jujhar Singh
2
@JujharSingh Kenapa tidak docker rm myContainerName?
Rodrigo
153

Di sini yang saya lakukan, itu berfungsi dengan baik.

langkah 1: (daftar kontainer docker dengan namanya)

docker ps -a

Langkah 2:

docker rm name_of_the_docker_container
Thavaprakash Swaminathan
sumber
4
Ini membantu saya, "buruh pelabuhan ps" secara tidak sengaja perlu - bendera untuk mengembalikan apa pun.
MichaelChan
buruh pelabuhan ps mengembalikan hanya menjalankan wadah dan kebutuhan -a untuk daftar bahkan yang berhenti.
Surendra Pratap
57

Hanya untuk menjelaskan apa yang orang lain katakan (butuh beberapa waktu untuk saya mengerti) adalah bahwa, secara sederhana, ketika Anda melihat kesalahan ini, itu berarti Anda sudah memiliki sebuah wadah dan apa yang harus Anda lakukan adalah menjalankannya. Meskipun secara intuitif docker runseharusnya menjalankannya, tetapi tidak. Perintah docker runini digunakan untuk MULAI wadah untuk pertama kalinya. Untuk menjalankan wadah yang ada, apa yang Anda butuhkan adalah docker start $container-name. Begitu banyak meminta pengembang untuk membuat perintah yang bermakna / intuitif.

mithunpaul
sumber
32

Anda memiliki 2 opsi untuk memperbaikinya ...

  1. Hapus wadah sebelumnya menggunakan nama itu, dengan perintah docker rm $(docker ps -aq --filter name=myContainerName)

    ATAU

  2. Ganti nama wadah saat ini dengan nama yang berbeda, misalnya ubah bagian ini --name registry-v1menjadi seperti --name myAnotherContainerName

Anda mendapatkan kesalahan ini karena nama wadah (yaitu registry-v1) digunakan oleh wadah lain di masa lalu ... meskipun wadah itu mungkin telah keluar yaitu (saat ini tidak digunakan).

Edwin Ikechukwu Okonkwo
sumber
30

Ketika Anda sedang membangun gambar baru Anda sering ingin menjalankan wadah baru setiap kali dan dengan nama yang sama. Saya menemukan cara termudah adalah memulai wadah dengan opsi --rm :

--rm        Automatically remove the container when it exits

misalnya

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

Sayangnya itu digunakan hampir secara acak dalam contoh-contoh dari dokumen

Martin
sumber
gambar atau wadah?
Pim Heijden
1
Kontainer dijalankan dari gambar yang dibuat. Mirip dengan definisi kelas (gambar) dan instance kelas (wadah).
Martin
Pertama Anda mengatakan wadah, lalu gambar. Itu tidak jelas. Selain itu, jika wadah untuk gambar itu sudah berjalan, itu akan tetap berjalan setelah digunakan --rm. Itu tidak restart.
Pim Heijden
4
Hanya sebuah catatan: --rmhanya berfungsi jika Anda telah membuat wadah menggunakan --rmbendera. Ini berarti, jika Anda membuat wadah tanpa --rmbendera, Anda harus menghapusnya secara manual sebelum Anda dapat memanfaatkan rmbendera tersebut.
lepe
18

Sebab

Wadah dengan nama yang sama masih ada.

Larutan

Untuk menggunakan kembali nama wadah yang sama, hapus wadah yang ada dengan:

docker rm <container name>

Penjelasan

Kontainer dapat ada di negara-negara berikut, di mana nama wadah tidak dapat digunakan untuk wadah lain:

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

Anda dapat melihat wadah dalam runningkeadaan dengan menggunakan:

docker ps

Untuk menampilkan wadah di semua negara bagian dan mencari tahu apakah nama wadah diambil, gunakan:

docker ps -a
Roderick Jonsson
sumber
Jika seseorang ingin menggunakan kembali wadahnya, maka --rm bukan saklar yang tepat. Cukup "buruh pelabuhan mulai {nama wadah}" sudah cukup.
Ken Ingram
11

Inilah cara saya mengatasi ini di ubuntu 18:

  1. $ sudo docker ps -a
  2. salin ID wadah

Untuk setiap wadah lakukan:

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

Anda dapat menghapusnya dengan perintah sudo docker rm YOUR_CONTAINER_ID, lalu jalankan wadah baru dengan sudo docker run ...; atau mulai ulang wadah yang ada dengansudo docker start YOUR_CONTAINER_ID

donglei
sumber
7

Saya telah memecahkan masalah dengan melakukan langkah-langkah berikut dan saya harap ini membantu.

  1. Ketik docker ps -auntuk mencantumkan semua wadah di sistem Anda.
  2. Periksa bagian NAMES di mana Anda telah menginisialisasi wadah buruh pelabuhan Anda.
  3. Kemudian ketik docker rm --force name_of_container
  4. Pasang wadah buruh pelabuhan sesuai keinginan.

Saya punya masalah menggunakan NIFI dan saya telah menghapus dan menginstal ulang menggunakan buruh pelabuhan. Semoga berhasil.

Nijat Mursali
sumber
4

Saya hanya belajar buruh pelabuhan dan ini membuat saya juga. Saya sudah menghentikan wadah dengan nama itu dan karena itu saya pikir saya bisa menjalankan wadah baru dengan nama itu.

Bukan kasusnya. Hanya karena wadah dihentikan, tidak berarti wadah tidak dapat dimulai lagi, dan menyimpan semua parameter yang sama dengan yang dibuatnya (termasuk namanya).

ketika saya berlari docker ps -a saat itulah saya melihat semua wadah uji tiruan yang saya buat saat saya bermain-main.

Tidak masalah, karena saya tidak ingin itu lagi, saya baru saja melakukannya docker rm containernamedi mana wadah baru saya diizinkan untuk berjalan dengan nama lama.

Ah, dan sekarang setelah saya selesai menulis jawaban ini, saya melihat komentar Slawosz tentang jawaban Walt Howard di atas menyarankan penggunaan docker ps -a

C. Tewalt
sumber