Tại sao xảy ra xung đột nàyDocker rất nghiêm ngặt về việc đặt tên. Khi bạn sử dụng cờ --name, tên cụ thể đó sẽ trở thành một định danh duy nhất trên máy chủ của bạn. Nếu bạn cố gắng khởi chạy một container mới có tên là web-server trong khi một container khác—ngay cả khi đã dừng—đang chiếm giữ tên đó, Docker sẽ dừng khẩn cấp.
Bạn thường gặp lỗi này trong quá trình phát triển cục bộ. Có thể một instance trước đó đã bị lỗi, hoặc có lẽ bạn quên dừng container trước khi thử chạy phiên bản mới. Ngay cả khi container không hoạt động, nó vẫn 'sở hữu' tên đó trong metadata của Docker cho đến khi được xóa đi một cách rõ ràng.
docker: Error response from daemon: Conflict. The container name "/my-app" is already in use by container "a3f9b2c1d4e5". You have to remove (or rename) that container to be able to reuse that name.
Tìm container "bóng ma"Thông báo lỗi thực tế đã cung cấp cho bạn ID của container gây lỗi (a3f9b2c1d4e5). Bước đầu tiên là kiểm tra trạng thái của container này. Hãy nhớ rằng, lệnh docker ps cơ bản chỉ hiển thị các container đang chạy. Để xem tất cả, bạn cần thêm cờ -a.
Chạy lệnh sau để truy tìm xung đột:
docker ps -a | grep my-app
Bạn có thể sẽ thấy kết quả cho thấy container đang ở trạng thái 'Exited' (Đã thoát):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a3f9b2c1d4e5 nginx "/docker-entrypoint.…" 15 minutes ago Exited (0) 5 minutes ago my-app
Cách giải quyết xung đột đặt tên### 1. Cách sửa nhanh nhất: Dừng và XóaNếu container cũ không còn giá trị, hãy loại bỏ nó. Nếu nó vẫn đang chạy, bạn cần dừng nó trước. Bạn cũng có thể sử dụng cờ 'force' để thực hiện cả hai việc cùng lúc.
Cách tiếp cận hai bước:
docker stop my-app
docker rm my-app
Cách một dòng lệnh (Cưỡng ép):
docker rm -f my-app
Sau khi container cũ biến mất, lệnh docker run ban đầu của bạn sẽ hoạt động hoàn hảo.
2. Cách 'Lưu lại để dùng sau': Đổi tênĐôi khi container cũ đó chứa log hoặc một trạng thái cụ thể mà bạn chưa muốn mất. Thay vì xóa nó, hãy đổi tên để tránh xung đột. Đây là một thói quen tốt khi gỡ lỗi (debug) các lần triển khai thất bại.
docker rename my-app my-app-broken-v1
Việc này sẽ giải phóng tên my-app ngay lập tức trong khi vẫn giữ an toàn dữ liệu để bạn kiểm tra.
3. Cách tự động hóa: Sử dụng cờ --rmBạn mệt mỏi với việc dọn dẹp thủ công? Nếu bạn đang chạy các tác vụ tạm thời—như migration cơ sở dữ liệu hoặc kiểm thử một lần—hãy thêm cờ --rm vào lệnh của bạn. Điều này yêu cầu Docker xóa container ngay khi nó dừng lại.
docker run --rm --name my-app my-image:latest
Đây là "cứu cánh" cho các pipeline CI/CD, nơi các container còn sót lại có thể làm hỏng chu kỳ build tiếp theo.
Giải quyết vấn đề trong Docker ComposeNếu bạn thấy lỗi này khi sử dụng docker-compose up, điều đó thường có nghĩa là môi trường cục bộ và trạng thái nội bộ của Compose không đồng bộ. Điều này xảy ra nếu bạn tạo thủ công một container có cùng tên bên ngoài tệp YAML.
Buộc Compose tạo lại mọi thứ từ đầu:
docker-compose up -d --force-recreate
Nếu cách đó vẫn không giải quyết được, hãy gỡ bỏ hoàn toàn môi trường và bắt đầu lại:
docker-compose down
Kiểm tra lại kết quảXác minh việc sửa lỗi bằng cách lọc danh sách container theo tên. Nếu xung đột đã hết, kết quả sẽ trống hoặc hiển thị ID container mới của bạn.
docker ps -a --filter "name=my-app"

