Gần đây, tôi đã viết một số hướng dẫn thú vị về việc sử dụng Docker, một công nghệ gọn gàng bao bọc LXC trong một niềm vui thú vị, và cho phép, tôi sẽ nói thế nào, các nhà phát triển, kỹ sư và quản trị viên hệ thống ít tự kỷ hơn, không quan tâm lắm trên Python nôn mửa, hãy tận hưởng những điều kỳ diệu của ảo hóa cấp hệ điều hành. Nhưng có vấn đề.
Hai vấn đề mà chúng ta sẽ thảo luận hôm nay xảy ra khi bạn khởi động một vùng chứa đã đặt tên hoặc cố gắng xóa một vùng chứa. Cụ thể, các chữ cái lạ mắt trên màn hình sẽ có nội dung như:"Xung đột. Tên W đã được sử dụng bởi vùng chứa XYZ. Bạn phải xóa..." Và vấn đề thứ hai là:"Xung đột, không thể xóa mặc định tên của vùng chứa..." Ngoài việc sử dụng sai dấu câu một cách trắng trợn, giờ đây chúng ta cần tìm ra cách giải quyết vấn đề này.
Vấn đề
Được rồi, chúng ta có vấn đề này:
docker run -d -ti -p 22 -p 80 --name
FATA[0000] Phản hồi lỗi từ daemon:Xung đột. Tên "XYZ" đã được mã hexacode vùng chứa sử dụng. Bạn phải xóa (hoặc đổi tên) vùng chứa đó để có thể sử dụng lại tên đó.
Chúng tôi không thể bắt đầu vùng chứa vì tên đã được sử dụng. Chạy lệnh docker ps, bạn sẽ không thấy nó ở đó. Ngoài ra, nếu bạn cố gắng loại bỏ hoặc loại bỏ phần còn lại của vùng chứa vi phạm, bạn sẽ nhận được:
docker rm --link
Phản hồi lỗi từ daemon:Xung đột, không thể xóa tên mặc định của vùng chứa
Lỗi FATA[0000]:không thể xóa một hoặc nhiều vùng chứa
Có vẻ như là một ngõ cụt. Giờ thì sao?
(Các) giải pháp
Đầu tiên, hãy tìm ra những gì chúng ta có trong tay. Rõ ràng, tại một thời điểm nào đó trong quá khứ, bạn đã tạo một vùng chứa được đặt tên và sau đó, bạn đã để nó chạy. Sau đó, máy chủ của bạn đã được khởi động lại vì bất kỳ lý do gì và bạn đã không chấm dứt các vùng chứa của mình một cách duyên dáng. Các tệp còn lại giờ đây dường như ngăn bạn hồi sinh các vùng chứa mới với tên cũ, vì hệ thống cho rằng các vùng chứa cũ vẫn còn.
Có hai cách chúng ta có thể khắc phục vấn đề. Chúng ta sẽ bắt đầu với cái duyên dáng trước. Nếu bạn chạy lệnh docker ps, bạn sẽ không thấy các thùng chứa cũ của mình, vì chúng không thực sự chạy. Nhưng nếu bạn chạy lệnh docker os với cờ -a, bạn sẽ thấy tất cả lịch sử chạy vùng chứa của mình:
Các thùng chứa đã thoát theo cách bất thường sẽ có mã trạng thái khác không. Tìm kiếm những thứ bạn cần, dựa trên tên của chúng và xóa chúng bằng mã thập lục phân thực tế, ví dụ:
docker rm 85c2981e63f6 26ea04f41ab3
Phương pháp thứ hai là xóa thủ công các tệp còn sót lại trong /var. Cụ thể, các tệp có thể được tìm thấy trong /var/lib/docker/containers/. Mỗi thư mục vùng chứa sẽ có một mã định danh hàm băm siêu dài và bên trong nó là hàng tấn đầu ra JSON xấu xí. Nếu bạn tìm kiếm một chuỗi cụ thể khớp với tên vùng chứa mong muốn của mình, bạn sẽ tìm thấy thư mục liên quan chứa các tệp cấu hình của nó.
Xóa thư mục mẹ khớp với tìm kiếm tên, sau đó khởi động lại dịch vụ Docker. Sau đó, bạn sẽ có thể sử dụng lại tên của mình. Điều này giống như những gì chúng ta đã thấy với phần còn lại của KVM và libvirt.
docker khởi động lại systemctl
Và bạn nên đứng dậy và chạy, cậu bé già!
Kết luận
Một số vấn đề có thể thực sự khó chịu, đặc biệt khi chúng liên quan đến mức độ hiệu quả và hiệu quả của các dịch vụ xử lý sự cố, khởi động lại, v.v. Tôi không thích khi các tập tin còn sót lại gây ra quá nhiều đau buồn. Nó không nên như vậy, và các dịch vụ phải phục hồi một cách hoành tráng. Nhưng này, container vẫn là một công nghệ non trẻ, vì vậy loại công cụ này được mong đợi.
Hy vọng rằng, giống như một hệ thống điều hòa không khí lộng lẫy thổi bùng cơn thịnh nộ của nó lên kính chắn gió, chúng tôi đã làm tan sương mù và sự nhầm lẫn xung quanh việc tạo các thùng chứa được đặt tên và xóa phần còn lại sau khi khởi động lại bất ngờ và tương tự. Bây giờ, trải nghiệm Docker của bạn sẽ thú vị hơn một chút và bạn đã học được một hoặc hai điều về cách mọi thứ hoạt động trong nền. Nào, chúc vui vẻ.
Chúc mừng.