CodeBuild에서 docker run --name이 충돌하는 문제
개요
CodeBuild와 Github를 함께 사용하면 빌드가 연속적으로 실행되는 경우가 많습니다.
예를 들어, 다음과 같이 백그라운드에서 컨테이너를 움직여 놓아 테스트 등을 하고 있으면, 커밋이 단번에 밀려
複数のビルドが同時에 달려 버리는 경우가 자주 있습니다.$ docker run -d --name nginx1 nginx:alpine
$ docker run --link nginx1 alpine \
sh -c 'apk add curl && curl nginx1:80 && sleep 100'
그럴 때 다음과 같은 오류가 발생할 수 있습니다.
docker: Error response from daemon: Conflict. The container name "/nginx1" is already in use by container "XXXXXXXXX". You have to remove (or rename) that container to be able to reuse that name.
이것은, nginx1라는 이름으로 벌써 컨테이너가 움직이고 있어, 그 이름은 사용할 수 없기 때문에 rename 해 주세요라는 취지의 경고문입니다.
통상의 검증 환경이라고 rename 하면 문제 없습니다만, CodeBuild 등 CI 환경이라고 곤란합니다.
결론
다음 리포지토리에서 확인했습니다.
마지막으로 DOCKER_BUILDKIT이 원인이라고 썼습니다. 사실
ローカルキャッシュのDockerLayerCache 때문이었습니다 검증
아래와 같은
buildspec.yaml 를 준비해 검증하고 있습니다.※
echo $rand は、latestのイメージが他のビルドで上書きされないかの検証version: 0.2
env:
variables:
DOCKER_BUILDKIT: "1"
phases:
build:
commands:
# 省略
- |
docker build -t app --build-arg rand=$RANDOM .
docker run app sh -c 'echo $rand'
docker run --name test alpine sh -c 'sleep 120'
docker run app sh -c 'echo $rand'
DockerLayerCache가 있는 경우
다음과 같은 오류가 발생합니다.
21546 # echo $randの結果
docker: Error response from daemon: Conflict. The container name "/test" is already in use by container "XXX". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
21546
DockerLayerCache가 있다면 실행중인 빌드에서 컨테이너 리소스를 공유하는 것 같습니다.
반대로 CustomCache나 SouceCache는 영향을 받지 않았다.
아무래도 좋은 일
bash 등에서
docker run --name를 사용하고 싶지만 매번 움직이면 충돌이 번거롭다는 분은 $RANDOM를 사용하십시오.$ docker run -d --name nginx-$RANDOM
Reference
이 문제에 관하여(CodeBuild에서 docker run --name이 충돌하는 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fnaoto/items/2754d62c5fb408a2360c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)