상황
linux2 aws ec2생성 후, 도커를 설치했습니다. 설치 후, 필요한 이미지를 pull 받아 컨테이너로 실행하려고 하는 상황입니다.
(설치 메뉴얼은 아래 링크를 활용했습니다.)
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/docker-basics.html
이슈
$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
예시로 hello-world이미지를 실행하기로 했더니, 다음과 같은 이슈가 발생했습니다.
이슈 분석하기
무슨 말인가 확인을 해봤더니, 권한이 없다는 문제입니다.
'ec2-user'가 루트 권한을 가지고 있다고 알고 있었는데 권한이 없다니?
원인
찾아보니 AWS에서는 EC2 인스턴스에 루트 권한을 기본으로 주지 않는다고 한다. 보안적인 측면에서는 좋지만 방금과 같이 루트 권한을 필요로 하는 소프트웨어를 다룰 때 나와 같이 권한 문제가 발생하게 된다는 점이 문제가 된다.
http://www.scalingbits.com/aws/sap/suse/rootaccess
해결방법
그렇다면 어떻게 해야 할까?
두 가지 방법이 있는데, 일단 나의 방법을 설명해보겠다.
1) 현재 로그인된 사용자를 docker 그룹에 등록하기
아까 말했듯이 난 ec2-user라는 사용자로 로그인되어 있다. 이를 도커 사용자 그룹에 추가하기 위해 다음과 같은 커맨드라인을 입력하자
$ echo $USER
$ sudo usermod -aG docker $USER
echo $USER를 통해 현재 로그인된 사용자가 USER라는 환경변수로 등록되어 있음을 확인가능하다.
두번째 라인의 명령어를 입력해서 사용자 그룹에 현재 로그인 사용자를 등록할 수 있다.
2) 두번째 방법은 루트 사용자를 만들고 실행하기다. 이것은 나중에 해보겠다.
결과
실행하려했던 명령어를 다시 해보니 성공적으로 이미지를 받아와 컨테이너를 실행했다! 성공!