🐳 도커 설치 후 컨테이너 실행시 "Got permission denied while trying to connect to the Docker daemon socket" 이슈
상황
linux2 aws ec2생성 후, 도커를 설치했습니다. 설치 후, 필요한 이미지를 pull 받아 컨테이너로 실행하려고 하는 상황입니다.
(설치 메뉴얼은 아래 링크를 활용했습니다.)
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/docker-basics.html
Amazon ECS의 Docker 기본 사항 - Amazon Elastic Container Service
경우에 따라서는 ec2-user가 도커 데몬에 액세스할 수 있는 권한을 제공하기 위해 인스턴스를 재부팅해야 할 수도 있습니다. 다음 오류가 표시될 경우 인스턴스를 재부팅해 보십시오. Cannot connect t
docs.aws.amazon.com
이슈
$ 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
Enable root Access for Linux Instances | Scalingbits
Enable root Access for Linux Instances
www.scalingbits.com
해결방법
그렇다면 어떻게 해야 할까?
두 가지 방법이 있는데, 일단 나의 방법을 설명해보겠다.
1) 현재 로그인된 사용자를 docker 그룹에 등록하기
아까 말했듯이 난 ec2-user라는 사용자로 로그인되어 있다. 이를 도커 사용자 그룹에 추가하기 위해 다음과 같은 커맨드라인을 입력하자
$ echo $USER
$ sudo usermod -aG docker $USER
echo $USER를 통해 현재 로그인된 사용자가 USER라는 환경변수로 등록되어 있음을 확인가능하다.
두번째 라인의 명령어를 입력해서 사용자 그룹에 현재 로그인 사용자를 등록할 수 있다.
2) 두번째 방법은 루트 사용자를 만들고 실행하기다. 이것은 나중에 해보겠다.
결과
실행하려했던 명령어를 다시 해보니 성공적으로 이미지를 받아와 컨테이너를 실행했다! 성공!