docker run -> 'name đã được sử dụng bởi container'


387

Chạy dockerregistry với lệnh bên dưới luôn gây ra lỗi:

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.

Làm thế nào để ngăn chặn lỗi này?

Câu trả lời:


427

Tôi cũng bị lẫn lộn bởi điều này. Có hai lệnh có liên quan ở đây:

Docker run Chạy một lệnh trong một container mới

docker start Bắt đầu một hoặc nhiều container đã dừng


8
Đây là câu trả lời tôi đang tìm kiếm để chạy lại một container Docker. Cảm ơn!
isapir

105
Vì vậy, nó cũng quan trọng để sử dụng docker ps -ađể xem tất cả các container trong trường hợp này.
Sławosz

9
có, docker start -a container-namelà lệnh bạn có thể sử dụng để bắt đầu một thùng chứa đã được tạo docker run. Lưu ý -acờ là tốc ký --attach. Bằng cách này, container được bắt đầu ở nền trước, giống như khi bạn sử dụng docker run(chạy một container ở phía trước theo mặc định).
Krzysztof Wołowski

1
@Suncatcher Có.
0x7d7b

1
@ eMPee584 Không, vì docker create tạo một container nhưng không chạy nó.
0x7d7b

182

Điều đó có nghĩa là bạn đã bắt đầu một container trong quá khứ với tham số docker run --name registry-v1 ... .

Bạn cần xóa nó trước khi bạn có thể tạo lại một container có cùng tên với docker rm registry-v1. Khi container đó đang chạy, bạn cần dừng nó trước khi bạn có thể xóa nó vớidocker stop registry-v1 . Hoặc đơn giản là chọn một tên khác cho container mới.

Để có được một danh sách các container hiện có và tên của chúng chỉ cần gọi docker ps -a.


4
Nhưng tại sao những người bị dừng lại? Hoặc những gì tốt nếu họ vẫn còn ở đó nếu họ dừng lại?
mskw

2
Vì vậy, bạn có thể chạy chúng sau mà không cần tạo lại chúng
Scott Stensland

2
Vì vậy, về cơ bản, bạn đang nói "để bạn có thể CHẠY hình ảnh một lần (nghĩa là tạo ra container sau đó chạy lệnh trong đó), sau đó BẮT ĐẦU container nhiều lần bạn muốn". Nhưng tại sao chúng ta cần CHẠY một cái gì đó chỉ một lần? Thậm chí không có những thay đổi có thể có mà "một cái gì đó" đã tạo ra cho container (hãy nhớ rằng, các thay đổi trạng thái của bộ chứa docker bị mất trừ khi được cam kết).
Maksim Gumerov

14
Nếu bạn biết tên của container, bạn có thể xóa nó bằng phím tắt nàydocker rm $(docker ps -aq --filter name=myContainerName)
Jujhar Singh

2
@JujharSingh Tại sao không chỉ docker rm myContainerName?
Rodrigo

153

Ở đây những gì tôi đã làm, nó hoạt động tốt.

Bước 1: (nó liệt kê container docker với tên của nó)

docker ps -a

bước 2:

docker rm name_of_the_docker_container

4
Điều này rất hữu ích với tôi, "docker ps" vô tình cần -a cờ để trả lại bất cứ thứ gì.
MichaelChan

docker ps chỉ trả về các container đang chạy và cần -a để liệt kê ngay cả những cái đã dừng.
Surendra Pratap

57

Chỉ cần giải thích những gì người khác đang nói (tôi phải mất một thời gian để hiểu) là, chỉ cần đặt, khi bạn thấy lỗi này, điều đó có nghĩa là bạn đã có một container và những gì bạn phải làm là chạy nó. Mặc dù theo trực giác docker runlà để chạy nó, nhưng nó không. Lệnh docker runđược sử dụng để chỉ BẮT ĐẦU một container lần đầu tiên. Để chạy một container hiện có, những gì bạn cần là docker start $container-name. Quá nhiều cho việc yêu cầu các nhà phát triển tạo ra các lệnh có ý nghĩa / trực quan.


32

Bạn có 2 tùy chọn để khắc phục điều này ...

  1. Loại bỏ container trước đó bằng tên đó, bằng lệnh docker rm $(docker ps -aq --filter name=myContainerName)

    HOẶC LÀ

  2. Đổi tên container hiện tại thành một tên khác, tức là thay đổi phần này --name registry-v1thành một cái gì đó như --name myAnotherContainerName

Bạn đang gặp lỗi này vì tên container đó (tức là registry-v1) đã được sử dụng bởi một container khác trong quá khứ ... mặc dù container đó có thể đã thoát tức là (hiện không được sử dụng).


30

Khi bạn đang xây dựng một hình ảnh mới, bạn thường muốn chạy một container mới mỗi lần và có cùng tên. Tôi thấy cách dễ nhất là khởi động container với tùy chọn --rm :

--rm        Automatically remove the container when it exits

ví dụ

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

Đáng buồn thay, nó được sử dụng gần như ngẫu nhiên trong các ví dụ từ các tài liệu


hình ảnh hay container?
Pim Heijden

1
Các container được chạy từ hình ảnh được xây dựng. Khá giống với định nghĩa lớp (hình ảnh) và thể hiện lớp (thùng chứa).
Martin

Đầu tiên bạn nói container, sau đó là hình ảnh. Điều đó không rõ ràng. Hơn nữa, nếu một thùng chứa cho hình ảnh đó đã chạy, nó sẽ vẫn chạy sau khi sử dụng --rm. Nó không khởi động lại.
Pim Heijden

4
Chỉ cần một lưu ý: --rmchỉ hoạt động nếu bạn đã tạo container bằng --rmcờ. Điều này có nghĩa, nếu bạn đã tạo vùng chứa mà không có --rmcờ, bạn sẽ phải xóa nó bằng tay trước khi bạn có thể tận dụng lợi thế của rmcờ.
Lepe

18

Nguyên nhân

Một container có cùng tên vẫn còn tồn tại.

Giải pháp

Để sử dụng lại cùng tên container, xóa container hiện có bằng cách:

docker rm <container name>

Giải trình

Các container có thể tồn tại ở các trạng thái sau, trong đó tên container không thể được sử dụng cho một container khác:

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

Bạn có thể thấy các container ở runningtrạng thái bằng cách sử dụng:

docker ps

Để hiển thị các container ở tất cả các tiểu bang và tìm hiểu xem tên container được lấy, sử dụng:

docker ps -a

Nếu một người muốn sử dụng lại container, thì --rm không phải là công tắc thích hợp. Một "docker start {tên container}" đơn giản là đủ.
Ken Ingram

11

Đây là cách tôi giải quyết vấn đề này trên Ubuntu 18:

  1. $ sudo docker ps -a
  2. sao chép ID container

Đối với mỗi container làm:

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

10

Bạn có thể loại bỏ nó bằng lệnh sudo docker rm YOUR_CONTAINER_ID, sau đó chạy một container mới với sudo docker run ...; hoặc khởi động lại một container hiện có vớisudo docker start YOUR_CONTAINER_ID


7

Tôi đã giải quyết vấn đề bằng cách thực hiện các bước sau và tôi hy vọng nó có ích.

  1. Nhập docker ps -ađể liệt kê tất cả các container trong hệ thống của bạn.
  2. Kiểm tra phần Nnam nơi bạn đã khởi tạo container docker của mình.
  3. Sau đó gõ docker rm --force name_of_container
  4. Cài đặt container docker như bạn muốn.

Tôi gặp vấn đề khi sử dụng NIFI và tôi đã gỡ bỏ và cài đặt lại bằng docker. Chúc may mắn.


4

Tôi chỉ đang học docker và điều này cũng giúp tôi. Tôi đã dừng container với tên đó và do đó tôi nghĩ rằng tôi có thể chạy một container mới với tên đó.

Không phải vậy. Chỉ vì container bị dừng, không có nghĩa là nó không thể được khởi động lại và nó giữ tất cả các tham số giống như được tạo (bao gồm cả tên).

khi tôi chạy docker ps -a đó là khi tôi thấy tất cả các thùng chứa thử nghiệm giả mà tôi đã tạo trong khi tôi đang chơi xung quanh.

Không có vấn đề gì, vì tôi không muốn những thứ đó nữa tôi đã làm docker rm containernamevào thời điểm đó container mới của tôi được phép chạy với tên cũ.

À, và bây giờ tôi viết xong câu trả lời này, tôi thấy bình luận của Slawosz về câu trả lời của Walt Howard ở trên gợi ý việc sử dụng docker ps -a

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.