Computer >> 컴퓨터 >  >> 소프트웨어 >> 가상 기기

Docker 컨테이너 시작/삭제 문제 - 해결 방법

최근에 저는 LXC를 기쁨의 털복숭이 묶음으로 감싸는 멋진 기술인 Docker 사용에 대한 몇 가지 흥미로운 자습서를 작성했습니다. Python 구토에서 OS 수준 가상화의 경이로움을 즐기십시오. 그러나 문제가 있습니다.

오늘 논의할 두 가지 문제는 명명된 컨테이너를 시작하거나 삭제하려고 할 때 발생합니다. 즉, 화면의 화려한 문자는 다음과 같이 표시됩니다. "충돌합니다. 이름 W는 이미 컨테이너 XYZ에서 사용 중입니다. 삭제해야 합니다..." 그리고 두 번째 문제는 "충돌, 기본값을 제거할 수 없습니다. 컨테이너 이름..." 구두점의 노골적인 오용과는 별개로 이제 이를 분류하는 방법을 알아내야 합니다.

문제

자, 이 문제가 있습니다:

docker run -d -ti -p 22 -p 80 --name <이름>
FATA[0000] 데몬의 오류 응답:충돌. "XYZ"라는 이름은 컨테이너 헥사코드에서 이미 사용 중입니다. 해당 이름을 재사용하려면 해당 컨테이너를 삭제(또는 이름 변경)해야 합니다.

이름이 이미 사용 중이므로 컨테이너를 시작할 수 없습니다. docker ps 명령을 실행하면 거기에 표시되지 않습니다. 또한 문제가 되는 컨테이너 남은 음식을 죽이거나 제거하려고 하면 다음과 같은 결과가 발생합니다.

docker rm --link <이름>
데몬의 오류 응답:충돌, 컨테이너의 기본 이름을 제거할 수 없습니다.
FATA[0000] 오류:하나 이상의 컨테이너를 제거하지 못했습니다

막 다른 골목처럼 보입니다. 그래서 지금은?

솔루션(들)

먼저, 우리가 가지고 있는 것이 무엇인지 알아봅시다. 분명히 과거의 어느 시점에서 이름이 지정된 컨테이너를 만든 다음 실행 상태로 두었습니다. 그 후 어떤 이유로든 호스트가 재부팅되었으며 컨테이너를 정상적으로 종료하지 않았습니다. 남은 파일은 이제 이전 이름으로 새 컨테이너를 다시 생성하지 못하게 하는 것 같습니다. 시스템은 이전 컨테이너가 여전히 제자리에 있다고 생각하기 때문입니다.

문제를 해결할 수 있는 두 가지 방법이 있습니다. 먼저 우아한 것부터 시작하겠습니다. docker ps 명령을 실행하면 이전 컨테이너가 실제로 실행되고 있지 않기 때문에 표시되지 않습니다. 그러나 -a 플래그와 함께 docker os 명령을 실행하면 모든 컨테이너 실행 기록이 표시됩니다.

비정상적인 방식으로 종료된 컨테이너는 0이 아닌 상태 코드를 갖습니다. 이름을 기준으로 필요한 것을 검색하고 실제 16진수 코드(예:

)를 사용하여 제거합니다.

도커 rm 85c2981e63f6 26ea04f41ab3

두 번째 방법은 /var에서 남은 파일을 수동으로 삭제하는 것입니다. 특히 파일은 /var/lib/docker/containers/에서 찾을 수 있습니다. 각 컨테이너 디렉토리에는 매우 긴 해시 식별자가 있으며 그 안에는 수많은 추악한 JSON 출력이 있습니다. 원하는 컨테이너 이름과 일치하는 특정 문자열을 검색하면 해당 구성 파일이 있는 관련 디렉터리를 찾을 수 있습니다.

이름 검색과 일치하는 상위 디렉토리를 삭제한 다음 Docker 서비스를 다시 시작하십시오. 그 후에는 이름을 다시 사용할 수 있어야 합니다. 이것은 우리가 KVM 및 libvirt 남은 음식에서 본 것과 같습니다.

systemctl 재시작 도커

그리고 당신은 일어나서 실행해야합니다, 늙은이!

결론

일부 문제는 특히 서비스가 충돌, 재부팅 등을 얼마나 잘 그리고 견고하게 처리하는지와 관련된 경우 정말 성가실 수 있습니다. 남은 파일이 너무 많은 슬픔을 일으키는 것을 싫어합니다. 그렇게 되어서는 안되며, 서비스는 웅장하게 회복되어야 합니다. 하지만 컨테이너는 아직 젊은 기술이므로 이런 종류의 작업이 예상됩니다.

바람막이 유리에 분노를 터뜨리는 영광스러운 에어컨 시스템처럼 명명된 컨테이너 생성과 예기치 않은 재부팅 후 남은 항목 삭제에 대한 안개와 혼란을 해소했습니다. 이제 Docker 경험이 좀 더 즐거워질 것이며 백그라운드에서 작동하는 방식에 대해 조금 또는 두 가지 배웠습니다. 자, 재미있게 보내세요.

건배.