가방을 구매하고 싶어서 찾던 도중, OpenClaw에게 시켜보고 싶다는 생각이 들어서, 요청을 했다.
그러나 기본 설정 상태의 OpenClaw는 웹 조회 권한이 없는 듯했다.

직접 찾기 귀찮으니, 오늘은 웹 조회 권한을 줘 보기로 했다.
방법 조사
가장 확실한 방법일 것 같아서 OpenClaw에게 직접 물어보았다.

검색 공급자를 설정해 달라고 하는 답변이 왔다.
선택하지 않고, 직접 브라우저를 기동 해서 확인할 수 있게 할 순 없을까 하는 생각에 다시 한번 질문을 했지만, 정말 단호한 답변이 돌아왔다.

내가 생각하던 것 과는 다르다는 느낌이 들어서 직접 알아보기로 했다 (...)
공식 문서를 알아보던 중, Browser에 관한 문서가 있었다. 여기에는 내가 원하던 방식인 Docker환경에서 Playwright를 설치하는 방법이 포함되어 있었다.
Browser (OpenClaw-managed) - OpenClaw
Browser (OpenClaw-managed)
docs.openclaw.ai
이 문서 정보를 OpenClaw에게 넣어서 확인을 하면 가능한지 답이 나올 것 같아서 한번 더 질문했다.

좋아. 가능성이 보이기 시작했다.
OpenClaw의 답변에 의하면, 성공 조건은 4가지이다.
1) OpenClaw 도구 프로필이 messaging이 아닌 로컬 실행 가능 프로필
2) 컨테이너에 Playwright 브라우저/의존성 설치 완료
3) 컨테이너 재기동 후 OpenClaw가 해당 도구를 인식
4) --shm-size(또는 ipc) 부족하지 않게 설정
설치 시작
1) OpenClaw 도구 프로필이 messaging이 아닌 로컬 실행 가능 프로필로 변경하기
Tools - OpenClaw
docs.openclaw.ai
이번에도 공식 문서와 함께 하기로 했다.
해당 설정은 openclaw.json파일에서 확인할 수 있다.
파일 경로에 대한 설명은 이전 글을 참고한다.
$ sudo cat /root/.openclaw/openclaw.json
{
...
"tools": {
"profile": "messaging"
},
...
}
파일을 확인해 보니, profile이 messaging으로 되어있다.
공식 문서에는 여러 가지 상세한 설정이 가능한 것으로 보였지만, 전부 읽어보기 귀찮았기에, OpenClaw에게 질문을 했다.

뭐..? 그게 가능해?
공식문서에는 local이라는 profile은 보이지 않았지만, 속는 셈 치고 해 보기로 했다.


빠르게 포기하고, 수동으로 변경을 시도했다.
우선 나는 Docker 환경이고, Ubuntu Server 자체에 크게 중요한 내용은 없었기에, full 권한을 주기로 했다.
$ sudo vi /root/.openclaw/openclaw.json
# 아래처럼 변경
{
...
"tools": {
"profile": "full"
},
...
}
일단 이걸로 설정은 되었을 거라 믿고, 다음을 진행하기로 했다.
2) 컨테이너에 Playwright 브라우저/의존성 설치하기
공식 문서에는 이렇게 적혀있었다.
If your Gateway runs in Docker, avoid npx playwright (npm override conflicts). Use the bundled CLI instead
Gateway가 Docker에서 실행되는 경우 npx playwright(npm 오버라이드 충돌)를 사용하지 말 것. 대신 번들로 제공되는 CLI를 사용할 것
그리고 아래와 같은 명령어가 제시되어 있었다.
docker compose run --rm openclaw-cli \
node /app/node_modules/playwright-core/cli.js install chromium
공식 문서의 명령어 아래에는 이런 문구가 적혀있다.
To persist browser downloads, set PLAYWRIGHT_BROWSERS_PATH (for example, /home/node/.cache/ms-playwright) and make sure /home/node is persisted via OPENCLAW_HOME_VOLUME or a bind mount. See Docker.
브라우저 다운로드를 지속하려면 PLAYWRIGHT_BROWSERS_PATH(예: /home/node/.cache/ms-playwright)를 설정하고, /home/node가 OPENCLAW_HOME_VOLUME 또는 바인드 마운트를 통해 지속되도록 하십시오. Docker를 참조하십시오.
Playwright가 내려받은 브라우저 바이너리를 재사용하기 위한 설정으로, 단순히 실행만 하면, 볼륨 영속화가 되지 않아서, 재시작할 때 사라지는 문제가 발생한다.
참조하라고 하는 Docker 링크로 가게 되면, 이런 내용을 확인할 수 있다.
Persist Playwright browser downloads:
・Set PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright in docker-compose.yml.
・Ensure /home/node persists via OPENCLAW_HOME_VOLUME, or mount /home/node/.cache/ms-playwright via OPENCLAW_EXTRA_MOUNTS.
Persist Playwright 브라우저 다운로드:
・docker-compose.yml에서 PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright 설정.
・OPENCLAW_HOME_VOLUME을 통해 /home/node가 유지되도록 하거나, OPENCLAW_EXTRA_MOUNTS를 통해 /home/node/.cache/ms-playwright를 마운트 하십시오.
그럼 먼저, docker-compose.yml 파일을 수정하도록 하자.
sudo vi docker-compose.yml
# 아래와 같이 수정
services:
openclaw-gateway:
image: ${OPENCLAW_IMAGE:-openclaw:local}
environment:
...
PLAYWRIGHT_BROWSERS_PATH: /home/node/.cache/ms-playwright # 이 줄을 추가
...
volumes:
...
- ${PLAYWRIGHT_CACHE_DIR}:/home/node/.cache/ms-playwright # 이 줄을 추가
...
openclaw-cli:
environment:
...
PLAYWRIGHT_BROWSERS_PATH: /home/node/.cache/ms-playwright # 이 줄을 추가
volumes:
...
- ${PLAYWRIGHT_CACHE_DIR}:/home/node/.cache/ms-playwright # 이 줄을 추가
...
그리고 .env파일을 수정한다.
sudo vi .env
...
# 마지막 줄에 추가
PLAYWRIGHT_CACHE_DIR=/root/.openclaw/ms-playwright
그 후, 호스트 디렉터리를 작성해 준다.
sudo mkdir -p /root/.openclaw/ms-playwright
# 권한 설정
# 참고자료 : https://docs.openclaw.ai/install/docker#permissions-+-eacces
sudo chown -R 1000:1000 /root/.openclaw
이 수정으로, 공식문서와는 조금 다르지만, volume으로 연결하여, playwright관련 파일들을 컨테이너 삭제 후에도 유지되도록 할 수 있다.
이후, docker compose down, up으로 완전한 재기동을 해 주고, chromium을 설치하는 명령어를 수행한다.
# docker 재기동
docker compose down
docker compose up -d
# 설치 명령어 수행
docker compose run --rm openclaw-cli \
node /app/node_modules/playwright-core/cli.js install chromium
명령어를 실행했지만, 에러가 발생했다.

기본 entrypoint가 OpenClaw CLI로 되어있기 때문에 해당 문제가 발생하는 것 같다.
아래의 명령어로 바꾸어 실행해 본다.
docker compose run --rm --entrypoint node openclaw-cli \
/app/node_modules/playwright-core/cli.js install chromium

문제없이 설치되는 것 같다.
컨테이너에 직접 들어가서 설치하는 방법 또한 가능하다. (참고용)
파일이 존재하는지 확인부터 시작했다.
# docker container ls 결과에 있는 container ID를 입력
sudo docker exec -it [ContainerID] sh

파일 자체는 존재하고 있었다.
그래서 컨테이너에 접속한 상태에서 node 명령을 수행한다.
node /app/node_modules/playwright-core/cli.js install chromium

그 후에는 OpenClaw에서 사용할 browser를 설정해줘야 한다.
컨테이너 내부에서 chromium의 실행 파일의 경로를 확인한다. (아래의 결과와 같게 나올 것이다)
$ find /home/node/.cache/ms-playwright -type f \( -name chrome -o -name chromium -o -name chrome-wrapper \) | head -n 5
/home/node/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome-wrapper
/home/node/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome
해당 경로를 openclaw.json의 browser.executablePath에 등록해 준다.
$ sudo vi /root/.openclaw/openclaw.json
# 아래와 같이 설정
# 참고문서 : https://docs.openclaw.ai/tools/browser#configuration
{
...
"browser": {
"enabled": true,
"headless": true,
"noSandbox": true,
"executablePath": "/home/node/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome"
},
...
}
이것으로 설치가 완료되었으면 좋겠지만, 지금 설치한 것은 playwright의 바이너리 일 뿐, 의존성 패키지들을 설치해 주어야 한다.
공식 문서에 의하면
If you need Playwright to install system deps, rebuild the image with OPENCLAW_DOCKER_APT_PACKAGES instead of using --with-deps at runtime.
Playwright에서 시스템 종속성을 설치해야 하는 경우, 런타임에 with-deps 옵션을 사용하는 대신 OPENCLAW_DOCKER_APT_PACKAGES 옵션을 사용하여 이미지를 다시 빌드하십시오.
라고 적혀있다.
몇 번의 시행착오를 통해 알게 된 필요한 의존성은 아래와 같다.
- libnspr4
- libnss3
- libatk1.0-0
- libatk-bridge2.0-0
- libcups2
- libxkbcommon-x11-0
- libxcomposite1
- libxdamage1
- libxfixes3
- libxrandr2
- libgbm1
- libasound2
위 의존성들을 포함해서 빌드를 시도한다.
# 의존성 패키지를 추가 후, 재 빌드
sudo OPENCLAW_DOCKER_APT_PACKAGES="libnspr4 libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libxkbcommon-x11-0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2" ./docker-setup.sh
# 재 빌드 후 나오는 설정은 ESC를 눌러서 취소해도 괜찮다. (이미 설정 값들이 있기 때문)
시행착오 과정이 궁금하다면 아래를 확인하도록 하자.
Docker Container 내부에서 openclaw browser를 시작하는 명령어를 수행하며, 에러를 확인한다.
$ openclaw browser --browser-profile openclaw start
🦞 OpenClaw 2026.3.3 (unknown)
I keep secrets like a vault... unless you print them in debug logs again.
│
◇
Error: Error: Failed to start Chrome CDP on port 18800 for profile "openclaw".
Chrome stderr:
/home/node/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome:
error while loading shared libraries:
libatk-bridge-2.0.so.0:
cannot open shared object file: No such file or directory
위의 로그에서 어떠한 라이브러리를 로드하다가 에러가 나왔는지 확인할 수 있다.
이걸 반복하면서, 모든 의존성을 설치 해 준다.
사실 검색을 하면 나올 것 같았지만, 최소한의 라이브러리만 설치하고 싶다는 생각이 있었기에, 노가다를 했다.
3) 컨테이너 재기동 후 OpenClaw가 해당 도구를 인식하는지 확인
환경변수들을 적용하기 위해서 컨테이너를 완전 종료 후 기동했다.
그리고, 브라우저 프로필이 기동 되는지 확인한다.
# 컨테이너 재기동
docker compose down
docker compose up -d
# 컨테이너에 접속
docker container ls
docker exec -it [컨테이너ID] sh
# 브라우저 프로필 기동
openclaw browser --browser-profile openclaw start
# 브라우저 프로필 상태 확인
openclaw browser status

사진처럼 enabled, running이 true라면 문제없이 기동 된 것이다.
이것으로 준비가 완료되었고, OpenClaw가 제시한 4번은 문제가 생기면 늘려줄 예정이다.
동작 확인
Google은 너무 유명하다 보니, 내 블로그 기사 링크를 주고, 제목을 확인할 수 있는지 시켰다.

드디어 OpenClaw가 브라우저 조작이 가능하게 되었다.
한 번씩 브라우저 조작을 시키면, 답장이 돌아오지 않는 현상이 생긴다.
그래서 기본 타임아웃 값이 있는 것 같아서, 물어보고, 수정까지 시켜주었다.

권한을 full로 주니, 시키기만 하면 자기가 알아서 설정까지 다 해줘서 정말 세상 편하다는 걸 느꼈다.
오늘의 잡담
내가 사고 싶었던 가방은 결국 재고가 없는 것 같았다.

어제 직접 알아봤을 때도 재고가 없는 걸 확인했지만, OpenClaw에게 확인사살 당했다.
뜬금없지만, 디스코드로 OpenClaw에게 일을 시키면, 진행 중인 작업에 따라서 이모지를 찍어주는데 한 번씩은 귀엽게 느껴진다.

'AI > OpenClaw' 카테고리의 다른 글
| Docker 환경에서 OpenClaw Skills 설치 가능하게 만들기 (clawhub cli 설치) (0) | 2026.03.15 |
|---|---|
| Ubuntu Server에 OpenClaw 설치해본 이야기 (Docker 환경) (0) | 2026.03.09 |