programing

도커 - 이름이 이미 컨테이너에서 사용되고 있습니다.

closeapi 2023. 8. 9. 20:46
반응형

도커 - 이름이 이미 컨테이너에서 사용되고 있습니다.

» 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.

이 오류를 방지하려면 어떻게 해야 합니까?

저도 이것 때문에 혼란스러웠습니다.여기에는 두 가지 명령이 관련되어 있습니다.

docker run  # Run a command in a **new** container
docker start  # Start one or more stopped containers

즉, 과거에 이미 매개 변수를 사용하여 컨테이너를 시작했습니다.

docker run --name registry-v1 ...

이름이 같은 컨테이너를 다시 만들려면 먼저 해당 컨테이너를 삭제해야 합니다.

docker rm registry-v1

해당 컨테이너가 아직 실행 중인 경우 먼저 중지해야 다음을 사용하여 컨테이너를 삭제할 수 있습니다.

docker stop registry-v1

또는 새 컨테이너의 다른 이름을 선택합니다.

기존 컨테이너 목록을 가져오려면 컨테이너 이름을 호출합니다.

docker ps -a

여기 제가 한 일은, 잘 작동합니다.

1단계:(도커 컨테이너를 이름과 함께 나열합니다)

docker ps -a

2단계:

docker rm name_of_the_docker_container

새 이미지를 빌드할 때는 항상 동일한 이름으로 새 컨테이너를 실행해야 합니다.가장 쉬운 방법은 --rm 옵션으로 컨테이너를 시작하는 것이었습니다.

--rm        Automatically remove the container when it exits

예.

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

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

편집: 아래의 Lepe의 의견을 읽으십시오.

다른 사람들이 하는 말을 설명하자면(이해하는 데 시간이 좀 걸렸습니다), 간단히 말해, 이 오류가 나타나면 이미 컨테이너가 있고 컨테이너를 실행해야 한다는 것을 의미합니다.직관적으로는docker run운영해야 하는데, 그렇지 않습니다.docker run컨테이너를 처음 시작하는 만 사용됩니다.필요한 것은 기존 컨테이너를 실행하는 것입니다.docker start $container-name개발자들에게 의미 있는/직관적인 명령어를 만들어 달라고 요청하는 것은 여기까지입니다.

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

  1. 이름을 을 합니다.docker rm $(docker ps -aq --filter name=myContainerName)

    OR

  2. 즉, 이을 변경합니다. 이 부분은 다음과 같습니다. (이름: 이부변예경분변경--name registry-v1와 비슷한 정도로--name myAnotherContainerName

이름 당컨너이즉름이테해즉,registry-v1되었을 수 ).해당 컨테이너가 종료되었을 수도 있습니다(현재 사용되지 않음).

원인

동일한 이름을 가진 컨테이너가 여전히 존재합니다.

해결책

동일한 컨테이너 이름을 재사용하려면 다음 방법으로 기존 컨테이너를 삭제합니다.

docker rm <container name>

설명.

컨테이너는 다음과 같은 상태로 존재할 수 있으며, 이 동안 다른 컨테이너에 컨테이너 이름을 사용할 수 없습니다.

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

다음에서 컨테이너를 볼 수 있습니다.running다음을 사용하여 상태 지정:

docker ps

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

docker ps -a

Ubuntu 18에서 이 문제를 해결한 방법은 다음과 같습니다.

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

각 용기에 대해 다음을 수행합니다.

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

종료된 모든 컨테이너 제거

docker rm $(docker ps -a -f status=exited -q)

문제: 동일한 이름의 백그라운드 컨테이너가 실행되는 동안 새 컨테이너를 생성하려고 하면 충돌이 발생합니다.

오류는 다음과 같습니다.

서비스 X:Conflict에 대한 컨테이너를 만들 수 없습니다.X라는 이름은 이미 컨테이너 abc123xyz에서 사용되고 있습니다.해당 이름을 다시 사용하려면 해당 컨테이너를 삭제하거나 이름을 변경하지 않으려면 해당 컨테이너를 제거해야 합니다.

솔루션은 실행 중인 컨테이너에서 서비스 이름을 변경하거나 삭제한 후 다시 빌드합니다(이 솔루션은 유닉스/리눅스/macOS 시스템과 관련됨).

  1. 중인 모든 실행모컨테너가져sudo docker ps -a
  2. 특정 컨테이너 ID 가져오기
  3. 중복된 용기를 중지하고 제거합니다. / 강제로 제거합니다.
sudo docker stop <container_id>
sudo docker rm <container_id>

또는

sudo docker rm --force <container_id>

실행할 때 이 문제에 부딪혔습니다.docker rm(보통 효과가 있음) 저는 다음과 같은 것을 얻을 수 있습니다.

오류: 해당 이미지가 없습니다.

이에 대한 가장 쉬운 해결책은 다음을 실행하여 중지된 모든 컨테이너를 제거하는 것입니다.

docker container prune

" 을사하여제수있다니습거할용명령"로 할 수 .sudo docker rm YOUR_CONTAINER_ID그런 다음 새 컨테이너를 실행합니다.sudo docker run ...를 다시 할 때 사용합니다.sudo docker start YOUR_CONTAINER_ID

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

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

NIFI를 사용하는 데 문제가 있었고 도커를 사용하여 제거했다가 다시 설치했습니다.행운을 빌어요.

TL:DR;

용기를 합니다: 모든컨너나열테:
docker ps -a
ID로 합니다.
docker container rm <container_id>

OP의 문제는 오류입니다.상태를 삭제하는 것이 유일한 해결책은 아니며, 심지어 좋은 해결책도 아닙니다.는 문는입니다.docker run다시 중요하지 않고, 그리고.docker start 상임태불이 없으면입니다.run그래서 우리는 그것들을 결합해야 합니다.

예를 들어 이전 상태를 파괴하지 않고 Postgres를 실행하려면 다음을 시도합니다.

docker start postgres || docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=password postgres:13-alpine

저는 도커를 배우는 중이고 이것 또한 저를 얻었습니다.저는 이미 그 이름으로 컨테이너를 정지시켰기 때문에 그 이름으로 새로운 컨테이너를 실행할 수 있다고 생각했습니다.

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

내가 뛰었을 때docker ps -a그때 제가 장난치는 동안 제가 만든 더미 테스트 용기를 보았습니다.

문제 없습니다, 저는 그것들을 더 이상 원하지 않기 때문에 방금 했습니다.docker rm containername내 새 컨테이너가 이전 이름으로 실행되도록 허용된 시점입니다.

아, 그리고 이제 이 답변을 다 쓰고 나니 위에 있는 월트 하워드의 답변에 대한 슬라우즈의 코멘트가 사용을 사용할 것을 제안합니다.docker ps -a

좋아요, 그래서 저도 이해를 못했어요, 그리고 나서 저는 제 컴퓨터를 두고 다른 일을 하러 갔고, 제가 돌아오자마자, 그것은 클릭했습니다:D.

  1. 도커 이미지 파일을 다운로드합니다.docker pull *image-name*실행하지 않고 도커 허브에서 이미지를 꺼냅니다.

  2. 이제 도커 실행을 사용하고 이름을 지정합니다(예: newWebServer).

    docker run -d -p 8080:8080 -v volume --name newWebServer image-name/version

당신은 아마도 필요한 것입니다.docker run --name *name* *image*하지만 다른 것들은 빠르게 유용해질 것입니다.

-d(으) - 컨테이너를 실행하는 데 사용된 루트 프로세스가 종료될 때 컨테이너가 종료됨을 의미합니다.

-p(port) - 컨테이너 포트 및 호스트 포트를 지정합니다.내부 및 외부 포트입니다.내부 포트는 컨테이너가 사용하는 포트이고 외부 포트는 컨테이너 외부에서 사용하는 포트이며 앱에 액세스하는 방법이라면 웹 브라우저에 넣어야 할 포트입니다.

--name(컨테이너의 이 인스턴스라고 할 내용) - 동일한 컨테이너의 여러 인스턴스가 모두 다른 이름을 가질 수 있으며, 이는 무언가를 테스트할 때 유용합니다.

image-name/version컨테이너를 생성하려는 실제 이미지입니다.은 시스의목볼수있습다로 볼 수 .docker images -a두 개 이상의 버전이 있을 수 있으므로 올바른 버전/태그를 선택해야 합니다.

-v(volume) - 처음에는 필요하지 않을 수 있지만 곧 컨테이너가 종료된 후에도 데이터를 유지할 수 있습니다.

좋아요. 이제 도커런은 당신의 이미지로 컨테이너를 만들었습니다.실행되고 있지 않으면 이제 이름으로 시작할 수 있습니다.

docker start newWebServer

모든 컨테이너(실행 중이거나 실행되지 않을 수 있음)를 검사할 수 있습니다.

docker ps -a

컨테이너 ID 열에서 이름 또는 컨테이너 ID(또는 컨테이너 ID의 처음 몇 문자만)를 사용하여 중지 및 시작(또는 일시 중지)할 수 있습니다.

docker stop newWebServer

docker start c3028a89462c

그리고 모든 이미지를 나열합니다.

docker images -a

즉, 이미지를 다운로드합니다. 도커 실행은 이미지에서 컨테이너를 생성합니다. 도커 시작(이름 또는 컨테이너 ID)으로 시작합니다. 도커 중지(이름 또는 컨테이너 ID)로 중지합니다.

컨테이너를 두 개 이상 가지고 있어서 이 .container_name도커-docker.yml 파일에 있습니다.

간단한 솔루션:시스템의 도커 폴더로 이동하여 큰 크기의 .raw 파일 또는 도커 아카이브를 삭제합니다.

저는 도커 파일에서 이미지 이름을 한 번 이상 사용한 것이 문제였습니다.

enter image description here

도커 튜토리얼에서 이런 일이 있었어요!사용하려고 했던 포트는 가져갔지만 도커는 여전히 생성되었습니다.이미지?도커를 실행하는 프로세스?곧 알아보겠습니다.어쨌든 다른 포트를 선택하려면 이전 이미지를 제거한 다음 도커를 다시 실행해야 했습니다.

때로는 튜토리얼이 너무 까다로울 수 있습니다.당신이 원하는 것은 간결하고 간결하거나 심지어 간결합니다.

언급URL : https://stackoverflow.com/questions/31697828/docker-name-is-already-in-use-by-container

반응형