Use Docker in Custom Image for AWS CodeBuild


AWS CodeBuild에서 Custom Image로 빌드하면서 Docker 사용하기

AWS CodeBuild에서 docker build와 같은 docker를 사용하기 위해서는 Privileged: true로 설정해야 한다. 그렇지 않으면

Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon running?

위와 같은 오류가 발생한다.

하지만 AWS에서 제공하는 CodeBuild 이미지가 아닌 Custom Image를 사용하는 경우 Privileged: true로 설정하더라도 위 오류가 계속 발생한다. 그 이유는 AWS에서는 본인들이 제공하는 이미지가 아닌 고객이 직접 생성한 이미지에 대해서는 신뢰를 할 수 없기 때문에 과도한 권한을 줄 수가 없다고 한다.

이것의 해결방법은 의외로 간단하다. buildspec에서 docker를 직접 실행시켜주면 된다.

version: 0.2

phases:
  install:
    commands:
      - nohup /usr/local/bin/dockerd --host=unix:///var/run/docker.sock --host=tcp://127.0.0.1:2375 --storage-driver=overlay2 &
      - timeout 15 sh -c "until docker info; do echo .; sleep 1; done"
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld echo "Hello, World!" 

위 예제코드처럼 phases.install.commands에 2줄의 명령어만 추가해주면 정상동작 한다.

참고: https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker-custom-image.html

이 글이 도움이 되셨다면 공감 및 광고 클릭을 부탁드립니다 :)