OpenClaw Gateway에 대한 컨테이너 격리를 원하지만 업그레이드 밤에 수동 편집 경로를 두려워하는 팀은 일반적으로 Compose, 명명된 볼륨 및 이미지 다이제스트를 절충합니다. 이 문서에서는 재현 가능한 Docker 생산 경로를 현장 Ubuntu 24.04 + systemd + Tunnel 베어 메탈 가이드와 명확하게 구분하여 기준선, docker-compose.yml 모양, 영구 볼륨, 이미지 업그레이드 및 상태 확인과 일반적인 컨테이너 오류에 대한 증상 표를 제시합니다.
베어메탈 경로는 추상화를 최소화합니다. 즉, 호스트의 프로세스, 재시작을 위한 시스템화, 공개 수신을 위한 터널입니다. Docker 경로는 아티팩트를 "디렉터리 + 단위 파일"에서 "이미지 + 작성"으로 바꿉니다. 업그레이드는 대부분 새 다이제스트를 가져오고, 컨테이너를 다시 만들고, 마운트가 여전히 정렬되어 있는지 확인하는 것입니다. 둘 다 에지에서 TLS를 사용하여 게이트웨이를 루프백 상태로 유지할 수 있습니다. 포크는 재현성과 보다 정밀한 롤백을 대가로 이미지 공급망 및 볼륨 거버넌스를 허용하는지 여부입니다.
레지스트리, 검색, SBOM을 이미 표준화한 경우 Compose는 마찰이 가장 적은 프로덕션 형태인 경우가 많습니다. 이탈률이 낮은 단일 VPS는 systemd만으로 서류상으로는 여전히 더 저렴할 수 있습니다. 아래의 6가지 문제점은 실제 분류 스레드에서 나온 것으로, 컨테이너에 대한 준비가 되었는지 알려줍니다.
치료latest버전 관리:프로덕션에서 다이제스트 또는 변경 불가능한 빌드 태그를 고정합니다. 그렇지 않으면 "어젯밤에 작동했습니다"는 파일 시스템 레이어에 매핑되지 않습니다.
구성을 이미지로 굽기:env, 비밀 또는 읽기 전용 마운트를 사용하십시오. 그렇지 않으면 모든 토큰 순환이 강제로 재구축되고 컨테이너 전달이 무효화됩니다.
디스크를 채우는 익명 볼륨:실험에서 얻은 이름 없는 캐시 볼륨이 조용히 소비됩니다./var/lib/docker; 명명된 볼륨이나 외부 객체 스토리지를 선호합니다.
항상 200을 반환하는 상태 확인:모델/구성 준비 없이 HTTP 포트만 검색하면 트래픽 이동 후 대량 502가 발생합니다.
Compose 및 터널 구성이 분기됨:이전에 게시된 포트를 여전히 가리키는 수신으로 인해 외부 증상이 컨테이너 로그와 관련이 없게 됩니다.
macOS 워크로드를 Linux 컨테이너에 강제 적용:베어메탈 기사와 동일합니다. Xcode/시뮬레이터 작업은 "마법의 샌드박스" Linux가 아닌 원격 Mac 실행 프로그램에 속합니다.
"이미지의 출처, 저장 볼륨, 업그레이드 소유자"에 답할 수 있으면 기준선과 템플릿으로 이동하세요. 그렇지 않은 경우 제작을 시작하기 전에 준비 단계에서 한 페이지 분량의 문서를 작성하세요.
두 경로를 모두 실행할 때 하나의 수신 + 터널 토폴로지 계약을 공유합니다. 호스트 루프백에서 컨테이너를 127.0.0.1에 매핑하고 cloudflared 또는 이에 상응하는 TLS를 종료합니다. systemd → Compose를 마이그레이션하면 보안 경계가 아닌 프로세스 감독자만 교체됩니다.
설치 스크립트와 Compose 저장소를 모두 유지 관리하는 경우 단일 소스 소스를 선언하세요. Compose는 표준이고 CI는 드문 베어 메탈 사례에 대해 시스템 코드 조각을 렌더링하거나 그 반대입니다. 이중 트랙 드리프트는 일반적으로 한쪽에서만 변경된 포트, 볼륨 이름 및 환경 경로로 나타납니다.
컨테이너는 종속성 지옥을 완화하지만 비밀 교체 또는 감사 요구 사항을 제거하지는 않습니다. 권한 및 회전 없이 env_file을 금고로 취급하는 것은 도덕적으로 토큰을 커밋하는 것과 동일합니다. 단지 사건 날짜가 지연된다는 점뿐입니다.
"분기별 업그레이드당 비용" 옆에 있는 "설치 시간"을 검토하세요. 컨테이너의 초기 비용은 더 높지만 반복하면 더 좋습니다. 자리 표시자 이름/포트를 실제 값으로 바꾸십시오.
| 차원 | 공용 IP의 게이트웨이 | systemd + 루프백 + 터널(베어메탈) | Docker Compose 프로덕션 |
|---|---|---|---|
| 납품 단위 | 손으로 만든 디렉토리/스크립트 | 유닛 + 구성 파일 | 이미지 다이제스트 + 파일 작성 |
| 업그레이드 경로 | 높은 드리프트 | 바이너리/구성 교체, systemctl 롤 | 이미지 가져오기, 컨테이너 재생성, 볼륨 확인 |
| 격리 | 약한 | 중간(사용자/권한) | 더 강력함(네임스페이스/cgroup - 전체 VM 아님) |
| 관찰 가능성 | DIY | 일기장은 분명하다 | Docker 로그 또는 사이드카 에이전트 통합 |
| 일반적인 비용 | 보안 위험이 가장 높음 | 보통 수준의 스크립팅 | 이미지 공급망 + 볼륨 운영 |
Compose는 런타임 + 지속성 + 종속 항목 가장자리를 선언합니다. 볼륨 및 태그 이름 지정을 거부하면 디스크 경고가 발생할 때까지 혼란만 연기됩니다.
Ubuntu 24.04 LTS 또는 유사한 버전에서는 지원되는 Docker 엔진 및 Compose v2 플러그인( docker compose )을 설치하여 CI를 prod와 분기시키는 레거시 독립 실행형 docker-compose 바이너리를 피하세요. 로그, 압축 풀기 임시 및 동시 연결을 위해 게이트웨이 이상의 RAM 예산을 책정합니다. /var/lib/docker 성장을 별도로 확인하세요.
보안은 베어메탈 기사와 일치합니다: 앱 포트에 대한 공개 리스너 없음, SSH 키만, 기본 거부 방화벽. 컨테이너는 네임스페이스를 추가합니다. 마술처럼 TLS나 액세스 정책을 구현하지 않습니다.
핀 버전:포착docker version그리고docker compose version런북에서; 스테이징/프로덕션 마이너를 정렬합니다.
로그 드라이버 + 회전:기본 json 파일 세트 사용max-size/max-file그래서 하나의 수다스러운 컨테이너가 디스크를 채울 수 없습니다.
전용 네트워크:기본적으로 게이트웨이와 터널 사이드카만 대화하도록 Compose에서 커스텀 브리지를 선언합니다.
등록 분야:문서 레지스트리, 이미지 이름, 다이제스트; prod pull은 테스트한 것과 동일한 레지스트리를 사용해야 합니다. 추적 없이 개발에서는 docker.io를 사용하고 추적 없이 prod에서는 개인 레지스트리를 사용하지 마세요.
볼륨/바인딩 전략:읽기 전용 구성 마운트, 런타임/캐시에 대해서만 쓰기 가능한 볼륨, 모드 400 파일로서의 비밀 또는 Docker 비밀.
다운/업 연습:준비 실행 중docker compose down그 다음에up -d; 볼륨이 유지되고 터널 업스트림이 여전히 올바른 루프백 포트를 대상으로 하는지 확인합니다.
메모:실제 OpenClaw 이미지 이름, env 키 및 CLI 플래그는 업스트림 문서를 따릅니다. 아래 YAML은 예시입니다. 자리 표시자를 교체하고 prod 전에 사용하지 않는 키를 삭제하십시오.
호스트 루프백이 터널에 피드를 제공하도록 127.0.0.1:host:container로 게시합니다. 이는 베어메탈 가이드의 "루프백 전용 바인딩"과 동일한 계약입니다. 상태 점검을 통해 HTTP 준비 상태를 입증해야 합니다. 업스트림에서 config verify 명령을 제공하는 경우 start_기간을 늘려 부팅 중에 새로운 컨테이너가 종료되지 않도록 하세요.
services:
openclaw-gateway:
image: ghcr.io/example/openclaw-gateway@sha256:<DIGEST>
restart: unless-stopped
env_file:
- ./gateway.env
volumes:
- openclaw_data:/var/lib/openclaw
- ./gateway.yaml:/etc/openclaw/gateway.yaml:ro
ports:
- "127.0.0.1:8787:8787"
healthcheck:
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:8787/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 40s
volumes:
openclaw_data:
업그레이드 순서: ① 다이제스트를 확인하기 위한 스테이징에서 docker compose 풀기; ② 명명된 볼륨 데이터를 백업하거나 구성을 내보냅니다. ③ prod docker는 -d --no-deps --build(사용하지 않은 경우 --build 삭제)를 구성하고 상태를 관찰합니다. ④ 호스트에서 터널을 통해 컬링; ⑤ 그런 다음에만 docker 이미지 정리를 고려하세요(여전히 롤백 레이어가 필요한 경우 위험함).
분류 스택: 구성/권한에 대한 컨테이너 로그입니다. 루프백 바인딩을 위한 호스트 ss -tlnp; 올바른 포트에 대한 터널 수신. 인터넷에 502가 표시되지만 컬 127.0.0.1이 작동하는 경우 먼저 이미지가 아닌 라우팅을 의심하세요.
파란색/녹색의 경우 두 개의 작성 프로젝트(다른 프로젝트 이름 및 루프백 포트)를 잠시 실행하고 터널 또는 내부 LB에서 가중치를 이동합니다. 그런 다음 docker compose -p old_project down 또는 이전 컨테이너가 볼륨 잠금 및 백그라운드 작업을 유지합니다.
게이트웨이가 호스트 Unix 소켓 또는 로컬 모델 사이드카에 도달해야 하는 경우 network_mode:host를 면밀히 조사하십시오. 이는 포트 맵 격리의 일부를 우회하며 두 사람이 변경 사항을 검토해야 합니다.
경고:절대 커밋하지 마세요gateway.envAPI 키로; CI는 렌더링된 Compose Env를 인쇄하면 안 됩니다. 잘못된 볼륨 UID/GID는 즉각적인 충돌이 아닌 불안정한 상태 확인으로 표시되는 경우가 많습니다.
이를 사용하여 "컨테이너는 공짜 점심이 아닙니다"라는 플랫폼에 맞춰 조정합니다. P95 측정항목 및 디스크 곡선으로 교체하세요.
CPU 단독이 아닌 재시작 횟수, 비정상 기간, 볼륨 사용량에 대해 경고합니다. 게이트웨이 스타일 서비스는 디스크나 파일 설명자가 소진된 후에만 급증하는 경우가 많습니다.
/var/lib/docker; pair alerts with volume backup policy.start_period is a common starting point.Linux 컨테이너는 OpenClaw 게이트웨이, 큐 및 가벼운 오케스트레이션에 적합하지만 Xcode, 시뮬레이터 및 Apple Silicon 기능은 벽에 부딪혔습니다. 호환성 심에 대한 비용을 영구적으로 지불하거나 전용 Mac으로 실행을 이동합니다. 잠자기, 업데이트 및 프롬프트로 인해 자동화가 중단되는 랩톱 또는 "임시" 호스트에서 게이트웨이를 실행하는 것과 비교할 때, 계약된 전용 원격 Mac은 장기간 Apple 작업 부하를 조정하는 반면 Linux는 제어 플레인을 위해 Docker 또는 시스템을 유지하므로 오류 도메인이 깨끗하게 유지됩니다. 안정적인 에이전트 및 빌드 파이프라인의 경우 일반적으로 NodeMini 클라우드 Mac Mini 임대가 더 나은 대답입니다. 게이트웨이를 VPS 컨테이너에 유지하고 잘못된 레이어를 패치하는 대신 주문 가능한 실행 노드에 무거운 작업을 전달합니다.
예. 환경(Compose 준비, prod systemd) 또는 서비스별로 분할됩니다. 두 게이트웨이가 동일한 루프백 포트를 놓고 경쟁하지 않도록 청취+터널 계약을 공유합니다. 더 많은 OpenClaw 게시물:카테고리 필터.
확인하다docker logshealth 명령이 여전히 새 이미지 경로와 일치하는지 여부 볼륨 권한 및 환경을 확인합니다. 더 많은 컴퓨팅을 보려면 다음을 검토하세요.임대 가격원격 Mac 노드용.
검색도움말 센터SSH/VNC 및 네트워킹용. 컨테이너 네트워킹의 경우 호스트 방화벽 규칙도 확인하고docker network.