ElGraph.Sandbox.Docker (ElGraph v0.3.0)

Copy Markdown View Source

docker run으로 코드를 격리 실행하는 ElGraph.Sandbox 어댑터.

ElGraph.Sandbox.Command와 달리 안전 기본값으로 강한 격리를 강제한다:

  • --network=none — 네트워크 차단 (:network로 재정의 가능).
  • --read-only — 루트 파일시스템 읽기 전용.
  • --memory=256m — 메모리 상한 (:memory).
  • --cpus=1 — CPU 상한 (:cpus).
  • --rm — 종료(타임아웃 포함) 시 컨테이너 자동 정리.

:timeout 초과 시 ElGraph.Sandbox의 공용 Task 래퍼로 러너를 죽이며, --rm 덕분에 컨테이너도 정리된다(Command의 best-effort 정리보다 강하다).

:runner(테스트 주입용, 기본 System.cmd)로 실행을 가로챌 수 있다.

지원 언어: "elixir", "python", "node", "ruby", "bash".

옵션

  • :language — 인터프리터 선택 (기본 "elixir").
  • :image — 컨테이너 이미지 (기본은 언어별, 아래 참조).
  • :network--network 값 (기본 "none").
  • :memory--memory 값 (기본 "256m").
  • :cpus--cpus 값 (기본 "1").
  • :timeout — 실행 제한(ms, 기본 :infinity). 초과 시 {:error, :timeout}.
  • :max_output — stdout 최대 바이트(기본 :infinity). 초과하면 잘라내고 truncated: true.
  • :runner(cmd, args, opts) -> {output, exit_code} (기본 System.cmd/3).