사건의 발단
화면 캡처를 하는 크롤링 프로그램을 개발하는데
로컬 환경에서 fast api에서 chromeDriver을 사용하는 것은 문제가 없었는데
도커 환경에 띄워서 크롤링을 진행하니 invalid session id라는 에러가 나는 것을 확인할 수 있었다
chrome 창이 많이 띄워져서 메모리가 부족해서 나는 이슈인가 했지만
그것은 아니었고 도커환경에서만 안되는 것을 확인하여 도커 관련 이슈인가 했지만
결론적으로는
disable-dev-shm-usage 옵션을 chrome option에 추가해주지 않은 것이 원인이었다
그렇다면 해당 옵션은 무엇이며
왜 도커 환경에서는 위 옵션을 켜야만 에러가 안났던 것일까...?
chrome driver 의 dev-shm 이용
chromedriver 혹은 chromium과 같은 renderer process는 성능을 높이기 위해
공유 메모리를 사용하게 됨
/dev/shm은 공유메모리로 리눅스 콘솔을 확인해보면 아래와 같이 tmpfs(임시 파일 스토리지) 로 돼있는 것을 확인할 수 있음

/dev/shm에 저장된 파일은 ram에 저장되기 때문에 실제로 매우 빠르며 휘발성임
문제의 원인은?
docker 내부에서 df -h를 입력해보면 /dev/shm에 64M로 적게 할당돼있는 것을 확인할 수 있다
기본적으로 컨테이너에서는 경량화를 목적으로 하기 때문에 공유 메모리 등을 매우 적게 잡은 것이라 할 수 있다

위 문제를 해결하기 위해서는 아래와 같이 해당 기능을 끄거나
options.add_argument("--disable-dev-shm-usage")
아니면 도커 실행 시에 --shm-size 로 사이즈를 조절해주면 된다
--disable-dev-shm-usage를 사용할 경우에는
해당 공유 메모리 대신 /tmp 디렉토리를 사용하게 되는데
이는 디스크 기반이기 때문에 io작업이 일어나 성능 저하를 일으킬 수 있다고 한다
애초에 로컬에서 위 에러가 나지 않았던 이유는 맥은
/dev/shm가 없기 때문에 어차피 tmp 디렉토리를 사용해서...