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