설명
/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
이 서비스에서 소켓 마운트를 제거합니다. 다른 권한과 마운트도 함께 검토해야 합니다.