Gần đây tôi viết vài hướng dẫn thú vị về Docker – công nghệ gói LXC trong "furry bundle of joy", cho phép những developer, engineer, sysadmin "kém tự kỷ" hơn, không thích "Python vomit", tận hưởng OS-level virtualization. Nhưng có vấn đề.
Hai issue hôm nay xảy ra khi start named container hoặc xóa container. Màn hình báo: "Conflict. The name W is already in use by container XYZ. You have to delete..." và "Conflict, cannot remove the default name of the container...". Bỏ qua lỗi dấu câu, cần giải quyết.
Vấn đề
Issue 1:
docker run -d -ti -p 22 -p 80 --name <name> <repo:tag> FATA[0000] Error response from daemon: Conflict. The name "XYZ" is already in use by container hexacode. You have to delete (or rename) that container to be able to reuse that name.
Không start được container vì tên đã dùng. Chạy docker ps không thấy. Thử kill/remove leftover:
docker rm --link <name> Error response from daemon: Conflict, cannot remove the default name of the container FATA[0000] Error: failed to remove one or more containers
Khuất đường. Làm sao?
Giải pháp
Trước hết, xem có gì. Hình như trước đây bạn tạo named container, để chạy. Sau đó host reboot lý do gì, không graceful terminate container. File leftover ngăn respawn container mới với tên cũ, vì hệ thống nghĩ container cũ vẫn còn.
Hai cách fix. Cách graceful trước. docker ps không thấy container cũ (chạy thực sự). Nhưng docker ps -a hiện tất cả lịch sử run:
Container exited bất thường có status code non-zero. Tìm theo tên, xóa bằng hex code thực:
docker rm 85c2981e63f6 26ea04f41ab3
Cách hai: xóa thủ công file leftover dưới /var/lib/docker/containers/. Mỗi container directory có hash identifier dài, bên trong JSON xấu xí. Tìm string match tên container mong muốn, xóa parent directory, restart Docker service. Giống leftover KVM/libvirt.
systemctl restart docker
Xong, dùng lại tên được.
Kết luận
Một số vấn đề thực sự khó chịu, nhất là liên quan đến cách service xử lý crash, reboot... Tôi ghét khi file leftover gây phiền toái. Không nên như vậy, service phải recover majestically. Nhưng container còn non trẻ, chuyện này dự kiến.
Hy vọng như hệ thống điều hòa vung 분노 lên kính chắn gió, chúng ta đã làm rõ sương mù và sự nhầm lẫn quanh tạo named container và xóa leftover sau reboot bất ngờ. Trải nghiệm Docker dễ chịu hơn, bạn học thêm chút về background. Have fun.
Cheers.