본문 바로가기
IT 서비스/모임 관리 플랫폼

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.49/images/create?fromImage=docker.io%2Flibrary%2Fmysql&tag=latest": dial unix /var/run/docker.sock: connect: p

by agong이 2025. 4. 28.

Jenkins를 Docker container로 생성해서 실행하면서 Docker outof Docker(DOOD) 형식을 채택하였습니다.

하지만 모두 정상적으로 했음에도 권한이 불가하다는 메세지를 받았습니다.

 

직접 Jenkins 컨테이너에 접속하여 usermod -aG docker jenkins 명령어를 입력하여 docker 그룹에 jenkins 사용자를 추가하였지만 해결되지 않았습니다. (getent group docker 를 입력하면 여전히 jenkins는 추가되어있지 않았음)

 

문제는 GID(GroupId)가 달라서였습니다. /var/run/docker.sock 파일은 호스트의 docker 그룹(GID) 소유하였지만 컨테이너 안에서 docker 그룹을 만들었어도, GID가 다르면 이름이 같더라도 다른 그룹으로 인식하였기 때문에 permission denied가 발생하였습니다. ( docker.sock 파일 소유 그룹은 GID=999,  jenkins는 GID=1001(docker) )

 

services:
  jenkins:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: jenkins
    ports:
      - "9000:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped
    networks:
      - jenkins-network

volumes:
  jenkins_home:

networks:
  jenkins-network:
    driver: bridge

FROM jenkins/jenkins:lts

USER root

RUN apt-get update && \
    apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release && \
    mkdir -m 0755 -p /etc/apt/keyrings && \
    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
    | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
    apt-get update && \
    apt-get install -y docker-ce docker-ce-cli containerd.io

RUN apt-get update && apt-get install -y awscli
RUN usermod -aG docker jenkins
USER jenkins

 

Dockerfile에서 명확하게 docker 그룹을 생성하고 usermod로 추가를 다시 해줘야 합니다.

그렇기 때문에 Dockerfile에 추가적인 작업을 진행하였습니다.

 

  • Dockerfile에서 ARG DOCKER_GID로 GID 받아오기
  • groupadd -forg ${DOCKER_GID} docker로 GID를 호스트와 맞추기
  • usermod -aG docker jenkins 해서 jenkins를 docker 그룹에 추가

이렇게 하면 이미지 자체에 설정이 되기 때문에 영구적으로 적용되어 컨테이너를 재시작해도 유지 되었습니다.

 

결과

FROM jenkins/jenkins:lts

USER root

ARG DOCKER_GID=999

# docker 그룹 만들고 (이미 있으면 무시) jenkins 유저 추가
RUN groupadd -forg ${DOCKER_GID} docker && \
    usermod -aG docker jenkins && \
    apt-get update && apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    awscli && \
    mkdir -p /etc/apt/keyrings && chmod 0755 /etc/apt/keyrings && \
    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
    > /etc/apt/sources.list.d/docker.list && \
    apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io && \
    apt-get clean && rm -rf /var/lib/apt/lists/*

USER jenkins

 

'IT 서비스 > 모임 관리 플랫폼' 카테고리의 다른 글

1000TPS를 견디는 모임 서비스  (0) 2025.04.28

댓글