docker run-> '이름은 컨테이너에서 이미 사용 중입니다'


387

docker아래 명령으로 레지스트리를 실행하면 항상 오류가 발생합니다.

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.

이 오류를 방지하는 방법은 무엇입니까?

답변:


427

나도 이것으로 혼란스러워했다. 여기에는 두 가지 명령이 있습니다.

docker run 새 컨테이너 에서 명령 실행

docker start 하나 이상의 중지 된 컨테이너를 시작합니다


8
이것이 Docker 컨테이너를 다시 실행하기 위해 찾고있는 대답입니다. 감사!
— isapir

105
따라서이 경우 docker ps -a모든 컨테이너를 보는 데 사용 하는 것이 중요합니다 .
— Sławosz

9
yes docker start -a container-name는로 작성된 컨테이너를 시작하는 데 사용할 수있는 명령입니다 docker run. 노트 -a에 대한 속기 플래그 --attach. 이렇게하면 컨테이너가 docker run기본적으로 전경에서 컨테이너를 실행하는 것처럼 컨테이너가 전경에서 시작됩니다 .
— Krzysztof Wołowski 2019 년

1
@Suncatcher 예.
— 0x7d7b

1
@ eMPee584 아니오, docker create 컨테이너를 작성 하지만 실행하지 않기 때문입니다.
— 0x7d7b

182

즉, 과거에 이미 매개 변수를 사용하여 컨테이너를 시작했음을 의미합니다 docker run --name registry-v1 ....

로 동일한 이름의 컨테이너를 다시 만들려면 먼저 삭제해야합니다 docker rm registry-v1. 해당 컨테이너가 실행 중이면을 사용하여 컨테이너를 삭제하기 전에 먼저 중지해야합니다 docker stop registry-v1. 또는 단순히 새 컨테이너의 다른 이름을 선택하십시오.

기존 컨테이너 및 해당 이름의 목록을 얻으려면 간단히 호출하십시오 docker ps -a.


4
그러나 왜 중단 된 것들입니까? 또는 그들이 멈 추면 여전히 거기에 있으면 좋을까요?
— mskw

2
따라서 나중에 다시 만들지 않고도 실행할 수 있습니다
— Scott Stensland

2
따라서 기본적으로 "이미지를 한 번만 실행 (컨테이너를 생성 한 후 명령을 실행) 한 다음 원하는만큼 컨테이너를 시작"할 수 있습니다. 그러나 왜 우리는 한 번만 무언가를 실행해야합니까? 컨테이너에 대한 "무언가"의 가능한 변경 사항을 유지하지 않으면 (커밋하지 않으면 docker 컨테이너 상태 변경 사항이 손실됩니다.)
— Maksim Gumerov

14
컨테이너 이름을 알고 있다면이 바로 가기를 사용하여 컨테이너를 제거 할 수 있습니다docker rm $(docker ps -aq --filter name=myContainerName)
— Jujhar Singh

2
@JujharSingh 왜뿐만 아니라 docker rm myContainerName?
— Rodrigo

152

여기서 내가 한 일은 잘 작동합니다.

1 단계 : (도커 컨테이너 이름을 나열합니다)

docker ps -a

2 단계:

docker rm name_of_the_docker_container

4
이것은 나에게 도움이되었다. "docker ps"는 직관적으로 아무것도 반환하지 않는 플래그를 필요로한다.
— MichaelChan

docker ps는 실행중인 컨테이너 만 반환하고 중지 된 컨테이너를 나열하기 위해 -a가 필요합니다.
— Surendra Pratap

57

다른 사람들이 말하는 것을 설명하는 것 (이해하는 데 약간의 시간이 걸렸습니다)은 단순히이 오류가 표시되면 컨테이너가 이미 있고 실행해야한다는 것을 의미합니다. 직관적 docker run으로 실행해야하지만 그렇지 않습니다. 이 명령 docker run은 컨테이너를 처음 시작 하는 데만 사용됩니다 . 기존 컨테이너를 실행하려면 필요한 것입니다 docker start $container-name. 개발자에게 의미 있고 직관적 인 명령을 작성하도록 요청하는 데 많은 도움이됩니다.


32

이 문제를 해결하는 두 가지 옵션이 있습니다 ...

  1. 명령을 사용하여 해당 이름을 사용하여 이전 컨테이너를 제거하십시오. docker rm $(docker ps -aq --filter name=myContainerName)

    또는

  2. 현재 컨테이너의 이름을 다른 이름으로 바꾸십시오. 즉,이 부분 --name registry-v1을 다음과 같이 변경하십시오 --name myAnotherContainerName

컨테이너 이름 (즉, registry-v1)이 과거에 다른 컨테이너에 의해 사용 되었기 때문에이 오류가 발생합니다. 컨테이너 가 종료되었을 수도 있습니다 (현재 사용 중이 아님).


30

새로운 이미지를 구축 할 때마다 매번 같은 이름으로 새 컨테이너를 실행하려고합니다. 가장 쉬운 방법은 --rm 옵션으로 컨테이너를 시작하는 것입니다.

--rm        Automatically remove the container when it exits

예 :

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

슬프게도 문서 의 예제에서 거의 무작위로 사용되었습니다.


이미지 또는 컨테이너?
— Pim Heijden 2016 년

1
컨테이너는 빌드 된 이미지에서 실행됩니다. 클래스 정의 (이미지) 및 클래스 인스턴스 (컨테이너)와 거의 비슷합니다.
— Martin

먼저 컨테이너를 말한 다음 이미지를 말합니다. 확실하지 않습니다. 또한 해당 이미지의 컨테이너가 이미 실행 중이면를 사용한 후에도 계속 실행됩니다 --rm. 다시 시작되지 않습니다.
— Pim Heijden 2018 년

4
참고 사항 : 플래그를 --rm사용하여 컨테이너를 만든 경우에만 작동합니다 --rm. 즉, --rm플래그 없이 컨테이너를 만든 경우 플래그를 이용 하려면 컨테이너를 수동으로 제거해야합니다 rm.
— lepe

18

원인

같은 이름의 컨테이너가 여전히 존재합니다.

해결책

동일한 컨테이너 이름을 재사용하려면 다음을 수행하여 기존 컨테이너를 삭제하십시오.

docker rm <container name>

설명

컨테이너는 다른 컨테이너에 컨테이너 이름을 사용할 수없는 다음 상태에 존재할 수 있습니다.

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

다음 running을 사용하여 컨테이너의 상태를 볼 수 있습니다 .

docker ps

모든 상태의 컨테이너를 표시하고 컨테이너 이름이 사용되는지 확인하려면 다음을 사용하십시오.

docker ps -a

컨테이너를 재사용하려면 --rm이 적절한 스위치가 아닙니다. 간단한 "도커 시작 {컨테이너 이름}"이면 충분합니다.
— Ken Ingram

11

우분투 18에서 이것을 해결하는 방법은 다음과 같습니다.

  1. $ sudo docker ps -a
  2. 컨테이너 ID를 복사

각 컨테이너마다 다음을 수행하십시오.

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

10

command를 사용하여 제거한 sudo docker rm YOUR_CONTAINER_ID다음 sudo docker run ...; 로 새 컨테이너를 실행할 수 있습니다 . 또는 기존 컨테이너를sudo docker start YOUR_CONTAINER_ID


7

다음 단계를 수행하여 문제를 해결했으며 도움이되기를 바랍니다.

  1. docker ps -a시스템의 모든 컨테이너를 나열하려면 입력 하십시오.
  2. 도커 컨테이너를 초기화 한 NAMES 부분을 확인하십시오.
  3. 그런 다음 입력 docker rm --force name_of_container
  4. 원하는대로 도커 컨테이너를 설치하십시오.

NIFI 사용에 문제가 있었고 docker를 사용하여 제거했다가 다시 설치했습니다. 행운을 빕니다.


4

나는 단지 도커를 배우고 있는데 이것은 나에게도 도움이된다. 해당 이름의 컨테이너를 이미 중지했기 때문에 해당 이름의 새 컨테이너를 실행할 수 있다고 생각했습니다.

그렇지 않습니다. 컨테이너가 중지되었다고해서 다시 시작할 수 없다는 의미는 아니며 이름을 포함하여 만든 동일한 매개 변수를 모두 유지합니다.

내가 그것을 실행할 때 내가 놀고 docker ps -a있는 동안 내가 만든 모든 더미 테스트 컨테이너를 보았을 때입니다.

문제가 없습니다. 더 이상 그런 것을 원하지 않기 때문에 docker rm containername새 컨테이너가 이전 이름으로 실행될 수 있습니다.

아, 이제이 답변을 작성 했으므로 위의 Walt Howard의 답변에 대한 Slawosz의 의견에서 docker ps -a

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.