DevOps/Docker

🐳 도커 설치 후 컨테이너 실행시 "Got permission denied while trying to connect to the Docker daemon socket" 이슈

ಠಿ_ಠ 💻 2021. 6. 30. 09:17

상황

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) 두번째 방법은 루트 사용자를 만들고 실행하기다. 이것은 나중에 해보겠다.

 

결과

실행하려했던 명령어를 다시 해보니 성공적으로 이미지를 받아와 컨테이너를 실행했다! 성공!