컨테이너에 마운트된 Docker 소켓

컨테이너에 Docker 소켓을 마운트하면 내부 프로세스가 호스트의 Docker 제어 권한을 가질 수 있습니다.

설명

/var/run/docker.sock를 컨테이너에 마운트하면 소켓 접근 권한이 있는 프로세스가 호스트 Docker 데몬과 직접 통신할 수 있습니다. 일반적인 root 권한의 데몬에서는 새 컨테이너 생성이나 호스트 경로 마운트를 통해 호스트까지 제어할 수 있습니다.

빌드 자동화나 관리에 쓰더라도 신뢰된 작업에만 허용해야 합니다. 소켓을 읽기 전용으로 마운트하는 것만으로 Docker API의 변경 작업을 차단할 수는 없습니다.

잠재적 영향

  • Docker API를 통해 다른 컨테이너나 호스트 파일에 접근할 수 있습니다.
  • 애플리케이션 침해가 데몬의 권한 범위까지 확대될 수 있습니다.

해결 방법

  • 일반 애플리케이션 컨테이너에는 /var/run/docker.sock를 마운트하지 마세요.
  • 빌드나 관리 작업은 격리된 실행 환경으로 분리하고, 데몬 접근을 신뢰된 실행 주체로 제한하세요.
  • 소켓을 제거한 뒤 필요한 작업이 동작하는지 확인하고 다른 Docker API 접근 경로도 검토하세요.

예시

이미지 이름은 예시입니다. 실제 애플리케이션 이미지로 바꾸고 필요한 포트만 공개하세요.

변경 전

yaml
version: "3.1"

services:
  service1:
    container_name: service
    image: notareal/image:latest
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 8080:8080

소켓에 접근할 수 있는 프로세스가 호스트 Docker API를 호출할 수 있습니다.

변경 후

yaml
version: "3.1"

services:
  service1:
    container_name: service
    image: notareal/image:latest
    restart: always
    ports:
      - 8080:8080

이 서비스에서 소켓 마운트를 제거합니다. 다른 권한과 마운트도 함께 검토해야 합니다.

참조