open claw 도커에서 실행하기

maxtnuk·2026년 2월 22일

openclaw를 사용해 보고 있고 꽤 재밌긴 합니다.
하지만 제 개인 mac에 바로 까는 거는 조금 불안한 감이 있습니다.
그래서 한번 docker에다가 깔고 할려고 합니다.

Gateway 도커에서 깔기

gateway를 docker에 까는 건 비교적 간단합니다.
openclaw repo에 가서 다음 스크립트 실행하면 됩니다.

docker-setup.sh

이렇게 하면 openclaw docker 이미지가 생성이 됩니다.
이때 생성할때는 .env 파일을 기반해서 생성하는데 그거 참고해서 넣어주시면 됩니다.

Docker compose 파일 수정하기

docker-compose.yaml 파일이 있는데 다음과 같이 구성되어 있습니다.

services:
  openclaw-gateway:
    image: ${OPENCLAW_IMAGE:-openclaw:local}
    environment:
      HOME: /home/node
      TERM: xterm-256color
      OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
      CLAUDE_AI_SESSION_KEY: ${CLAUDE_AI_SESSION_KEY}
      CLAUDE_WEB_SESSION_KEY: ${CLAUDE_WEB_SESSION_KEY}
      CLAUDE_WEB_COOKIE: ${CLAUDE_WEB_COOKIE}
    volumes:
      - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
      - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
    ports:
      - "${OPENCLAW_GATEWAY_PORT:-18789}:18789"
      - "${OPENCLAW_BRIDGE_PORT:-18790}:18790"
    init: true
    restart: unless-stopped
    command:
      [
        "node",
        "dist/index.js",
        "gateway",
        "--bind",
        "${OPENCLAW_GATEWAY_BIND:-lan}",
        "--port",
        "18789",
      ]

  openclaw-cli:
    image: ${OPENCLAW_IMAGE:-openclaw:local}
    environment:
      HOME: /home/node
      TERM: xterm-256color
      OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
      BROWSER: echo
      CLAUDE_AI_SESSION_KEY: ${CLAUDE_AI_SESSION_KEY}
      CLAUDE_WEB_SESSION_KEY: ${CLAUDE_WEB_SESSION_KEY}
      CLAUDE_WEB_COOKIE: ${CLAUDE_WEB_COOKIE}
    volumes:
      - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
      - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
    stdin_open: true
    tty: true
    init: true
    entrypoint: ["node", "dist/index.js"]

openclaw-gateway랑 openclaw-cli 각각 있습니다. 이걸 그냥 실행해도 되긴 하지만 한가지 불편한 점이 있습니다.

  • openclaw-cli는 단발성으로 실행하는 거여서 docker run을 매번 쳐야 한다.

그래서 저는 openclaw-cli를 계속 띄우고 안에서 명령어 쓸수 있게 만들었습니다.

openclaw-cli:
    image: ${OPENCLAW_IMAGE:-openclaw:local}
    environment:
      HOME: /home/node
      TERM: xterm-256color
      OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
      BROWSER: echo
      GEMINI_API_KEY: ${GEMINI_API_KEY}
      PATH: /home/node/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    volumes:
      - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
      - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
    working_dir: /app
    stdin_open: true
    tty: true
    init: true
    restart: unless-stopped
    network_mode: "service:openclaw-gateway"
    entrypoint:
      - "/bin/sh"
      - "-c"
      - "sleep infinity"

여기서 중요한 거는 docker networkmode를 service:openclaw-gateway 로 변경한 건데요. 이렇게 하면 openclaw-gateway와 같은 network로 묶을 수 있고 실행이 가능합니다.

Openclaw gateway를 docker에서 실행하면서 불편한점

몇가지 불편한 점들이 있습니다.

  • openclaw image에는 openclaw 명령어가 없는 상태로 image가 build 됩니다.
    • 이로 인해 openclaw 명령어를 실행할 때마다 실행 못한다고 agent가 같은 답변을 냅니다.
  • agent가 웹 브라우져를 실행할 수 가 없습니다.
    • openclaw image상에서는 브라우저가 설치되지 않습니다.

openclaw 명령어 해결

openclaw Dockerfile에서 다음과 같이 넣으면 됩니다.

RUN mkdir -p /home/node/.local/bin
RUN ln -sf /app/openclaw.mjs /home/node/.local/bin/openclaw

openclaw.mjs가 openclaw 명령어와 같은 역할을 하고 있어서 저렇게 연결하면 됩니다. 반영하면서 /home/node/.local/binPATH로 추가하면 됩니다.

웹브라우져 문제

이거는 openclaw image에서 브라우져를 까는 거 말고는 방법이 없습니다.
docker image에 chrome을 깔고 openclaw.json에 다음 내용을 넣으면 됩니다.

"browser": {
  "defaultProfile": "chrome"
},

sandbox 기능이 있기는 한데 이건 gateway가 host에서 도는 경우 agent들이 tool을 실행할때 docker container를 실행하는 거여서 지금 상황과 맞지는 않습니다.

소감

docker를 사용하지 않는다면 위와 같은 문제들을 맞이하지는 않습니다.
다만 이제 개인 정보가 담긴 환경에서 수행을 할때는 docker가 필수라고 생각이 드는데 아직 이에 대한 보완이 미숙한 것 같습니다.
그래도 오랫만에 가지고 놀만한 장난감이 생겨서 좋네요.
좀 더 사용해보고 좀 더 후기 남기겠습니다.

profile
Rust로 무난하게 개발하는 사람

0개의 댓글