Repolode
Tecnativa

Tecnativa/docker-socket-proxy

환경 변수로 Docker API의 특정 섹션을 허용하거나 차단하는, 보안에 중점을 둔 Docker 소켓 앞단의 HAProxy 프록시입니다.

스타
2,850
포크
211
열린 이슈
57
마지막 커밋
2개월 전

어떤 프로젝트인가요?

Docker Socket Proxy는 서비스와 Docker 소켓 사이에서 Docker API 요청 중 허용할 항목을 필터링합니다. 컨테이너에 소켓을 그대로 마운트하면 사실상 호스트의 root 권한을 부여하는 셈이지만, 이벤트에 반응하거나 컨테이너를 관리하기 위해 소켓이 필요한 서비스도 있습니다. 이 프록시를 사용하면 서비스에 필요한 API 부분만 노출할 수 있습니다.

이 프록시는 Alpine 기반 HAProxy 이미지와 작은 설정 파일로 구성됩니다. 각 API 섹션은 환경 변수를 1로 설정해 접근을 허용하거나 0으로 설정해 차단합니다. 차단된 섹션에 대한 요청에는 HTTP 403 응답을 반환합니다. Events, ping, version은 기본적으로 허용되며, AUTH와 SECRETS 같은 보안상 중요한 섹션 및 POST를 통한 쓰기 작업은 기본적으로 차단됩니다.

이 이미지에는 TLS가 제공되지 않으며, 공개적으로 노출하지 말고 비공개 Docker 네트워크에서 실행하도록 설계되었습니다. balenaOS 같은 시스템을 위해 SOCKET_PATH로 소켓 경로를 설정할 수 있고, LOG_LEVEL도 지정할 수 있습니다. 여러 Docker API 버전을 지원하며, Docker Hub와 GitHub Container Registry에 이미지를 게시합니다.

핵심 기능

  • 01섹션별 환경 변수로 Docker API 섹션의 접근을 허용하거나 차단합니다.
  • 02차단된 요청에 HTTP 403을 반환합니다.
  • 03POST를 비활성화해 프록시를 읽기 전용으로 제한할 수 있습니다.
  • 04SOCKET_PATH로 사용자 지정 소켓 경로를 지원합니다.
  • 05작은 설정 파일을 사용하는 Alpine 및 HAProxy 기반 이미지입니다.
  • 061.27부터 1.51까지 여러 Docker API 버전을 지원합니다.

활용 사례

  • 모니터링 컨테이너나 리버스 프록시 컨테이너에 컨테이너 이벤트를 읽기 전용으로 제공하는 경우.
  • CI 또는 자동화 도구가 호스트에서 권한이 높은 작업을 실행하지 못하도록 제한하는 경우.
  • Traefik 스타일의 서비스 디스커버리 도구에 필요한 Docker API 섹션만 노출하는 경우.

빠른 시작

  1. 1

    Docker socket에 액세스할 수 있도록 proxy 컨테이너를 실행합니다

    docker container run -d --privileged --name dockerproxy -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 tecnativa/docker-socket-proxy
  2. 2

    로컬 Docker 클라이언트가 proxy를 사용하도록 설정합니다

    export DOCKER_HOST=tcp://localhost:2375
  3. 3

    docker version으로 연결을 확인합니다

    docker version

사용 전 알아둘 점

  • README에 따르면 Docker socket에 연결하려면 컨테이너를 --privileged로 실행해야 합니다.
  • 이 이미지는 TLS를 지원하지 않으므로 트래픽은 일반 HTTP로 전송되며, 제한된 네트워크에서만 사용해야 합니다.
  • 보안상 중요한 영역에서는 각 Docker API 섹션에 대한 액세스가 기본적으로 비활성화되어 있으며, 명시적으로 허용해야 합니다.

포함된 컬렉션

토픽

자주 묻는 질문

docker-socket-proxy은(는) 무엇인가요?
환경 변수로 Docker API의 특정 섹션을 허용하거나 차단하는, 보안에 중점을 둔 Docker 소켓 앞단의 HAProxy 프록시입니다. Docker Socket Proxy는 서비스와 Docker 소켓 사이에서 Docker API 요청 중 허용할 항목을 필터링합니다. 컨테이너에 소켓을 그대로 마운트하면 사실상 호스트의 root 권한을 부여하는 셈이지만, 이벤트에 반응하거나 컨테이너를 관리하기 위해 소켓이 필요한 서비스도 있습니다. 이 프록시를 사용하면 서비스에 필요한 API 부분만 노출할 수 있습니다.
docker-socket-proxy은(는) 무료로 사용할 수 있나요? 라이선스는 무엇인가요?
docker-socket-proxy은(는) Apache-2.0 라이선스의 오픈소스입니다. 상업용 제품에 사용하기 전에 라이선스 조건을 확인하세요.
docker-socket-proxy은(는) 아직 유지보수되고 있나요?
6개월 이내 업데이트. docker-socket-proxy의 마지막 커밋은 2026년 8월 31일입니다.
docker-socket-proxy은(는) 어디에 사용할 수 있나요?
모니터링 컨테이너나 리버스 프록시 컨테이너에 컨테이너 이벤트를 읽기 전용으로 제공하는 경우. CI 또는 자동화 도구가 호스트에서 권한이 높은 작업을 실행하지 못하도록 제한하는 경우. Traefik 스타일의 서비스 디스커버리 도구에 필요한 Docker API 섹션만 노출하는 경우.
docker-socket-proxy는 어떻게 설치하나요?
Docker socket에 액세스할 수 있도록 proxy 컨테이너를 실행합니다: docker container run -d --privileged --name dockerproxy -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 tecnativa/docker-socket-proxy 로컬 Docker 클라이언트가 proxy를 사용하도록 설정합니다: export DOCKER_HOST=tcp://localhost:2375 docker version으로 연결을 확인합니다: docker version
docker-socket-proxy은(는) 어디서 받을 수 있나요?
소스 코드와 설치 방법은 GitHub에 있습니다: https://github.com/Tecnativa/docker-socket-proxy

요약은 프로젝트 README를 바탕으로 AI가 작성했습니다. GitHub 통계는 매일 갱신됩니다.

관련 프로젝트