포스트

Openclaw Docker로 구동하기

OpenClaw가 낳는 여러 보안사고 등이 무섭다. Docker로 가둬놓고 쓰자


발단

  • 링크드인이나 유튜브를 보면 OpenClaw의 위대함을 칭송하는 글이나 영상들이 쏟아져 나오는 한편 보안 위험으로 절대 사용하면 안된다는 부정적 인식 또한 공존한다.
  • 안전하게 docker container로 가두고 volume mount해서 내 로컬 디렉토리에 OpenClaw의 집게발이 닿는 공간을 제한하자.

세팅

  • 이미 readme에도 docker와 sandbox 세팅으로 보안을 챙기라는 가이드가 존재한다.
  • Docker Compose를 활용한 설치는 다음과 같다. (공식 docs 참조 link)
cli
1
2
3
4
5
6
7
# 공식 repo에서 clone
git clone https://github.com/openclaw/openclaw.git

# 레포 안에 미리 준비된 setup script 실행
bash ./docker-setup.sh

# 이후 환경변수(.env)와 script의 분기 그리고 docker-compose.yml이 실행되며 gateway와 cli가 실행되며 세팅 tui가 나타난다.

구성

  • docker-setup.sh script를 실행하면 .env에 준비된 환경변수들로 docker-compose.yml가 실행되고 하나의 openclaw 도커 이미지에서 두 개의 서비스 (openclaw-gateway & openclaw-cli)를 실행한다.

    docker-setup.sh

  • docker-compose.yml 파일에 대한 경로를 잡고있다.
  • OpenClaw의 설정과 에이전트들이 사용하는 경로를 잡고있다.
    • config는 openclaw.json의 위치로 이 파일이 webUI와 연동되며 agent, channel 등을 설정하는 데 사용하게 된다.
    • worspace dir는 차후 docker compose yml에서 openclaw docker 컨테이너에 마운트할 경로로 권한 제한을 위해 필요하다.

.env

  • 위처럼 기본적인 경로들과 포트, gateway와 연결할 때 사용하는 토큰이 있다.
  • 추가로 내가 설정한 OBSIDIAN_PATH 가 있는데 나는 내 개인 비서가 내가 작성한 obsidian 메모들을 활용해주길 바라므로 예외적으로 해당 부분만 제공하였다.

    docker-compose.yml

  • 위에 .env에서 설정했던 경로들을 OpenClaw Gateway 컨테이너에 마운트해 사용한다.
    • 로컬에서 설정파일 openclaw.json 을 변경하면 openclaw-gateway에 hotload가 일어나 자동으로 업데이트된다.
    • 내가 별도로 제어 권한을 주고 싶은 디렉토리(OBSIDIAN_PATH)을 마운트해 openclaw가 대화하는 데 읽거나 쓸 수 있게 한다.

추가 세팅

  • openclaw-cli에 network_mode를 추가해주어 cli가 gateway 서비스와 연동되게 하였다.
    • 이렇게 설정해야 openclaw-cli로 내 mac device에 있는 gateway 서비스를 인식할 수 있고 그래야 permission을 허용해 줄 수 있다.

명령어 사용

  • docker compose로 openclaw를 설치했으므로 당연히 내 shell에는 openclaw-cli가 없고 docker compose의 openclaw-cli svc를 다시 불러 컨테이너로 띄워 사용해야한다. (사용한 후에는 제거)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# gateway 명령
docker compose restart openclaw-gateway
docker compose status openclaw-gateway
docker compose start openclaw-gateway

# openclaw-cli를 이용해 `obsidian`이라는 이름의 agent 추가
docker compose run --rm openclaw-cli agents add obsidian

# openclaw-cli를 이용해 현재 pending 상태인 장비 리스트 출력
docker compose run --rm openclaw-cli devices list

# 목록을 보고 내 장비 request_id를 입력해 허용(approve)
docker compose run --rm openclaw-cli devices approve ac2b44dd-f32d-4...

# telegram을 channel로 이용했을 경우 pairing(default)한 사용자 확인 및 추가
docker compose run --rm openclaw-cli pairing list telegram

docker compose run --rm openclaw-cli pairing approve telegram NT2K...

# 다시 obsidian의 초기 온보딩 설정을 하고 싶은 경우
docker compose run --rm openclaw-cli onboard

  • device approve를 하지 않으면 webUI에 접속했을 때 1008 에러같은게 발생하고 별다른 설정권한이 없는 막힌 상태가 된다.

추가 명령

1
2
3
4
# .env 혹은 docker compose yml, docker-setup.sh 를 변경하였을 경우 당연하게도 
# openclaw-cli로 restart를 할 게 아니라 setup 자체를 다시 해야 한다.

bash docker-setup.sh

내가 만든 obsidian agent


+참조한 블로그 https://contents.premium.naver.com/codetree/funcoding/contents/260208003733025lb https://blog.leenit.kr/install-openclaw-with-docker/

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.