ㅇ.ㅇ
[Docker] Tomcat 컨테이너 실행 에러 cannot find setclasspath.sh 본문
반응형
상황
- Docker 버전 19.x를 사용하는 CentOS 서버에서 특정 tomcat 공식 이미지를 컨테이너로 구동하였을 시 해당 에러 발생
에러
- Tomcat 9 running on docker - Cannot find /usr/local/tomcat/bin/setclasspath.sh
원인
- 이 에러는 Docker 19의 오래된 libseccomp 버전이 최신 Tomcat 이미지에서 사용하는 시스템 호출을 인식하지 못해 발생하는 호환성 문제이다. 최신 Tomcat 이미지는 최신 Linux 커널과 libseccomp 버전에서 제공하는 새로운 시스템 호출을 사용하지만, Docker 19 버전에서는 이를 지원하지 못해 필요한 파일(/usr/local/tomcat/bin/setclasspath.sh)을 찾지 못하는 문제가 발생.
해결 과정
- 기존에 사용하려고 한 tomcat:9.0-jdk8 이미지 대신, tomcat:9-jdk8-corretto 이미지 사용하였음.
테스트
- tomcat:9.0-jdk8 : 컨테이너 구동 시 setclasspath.sh 파일을 찾지 못하는 에러 발생
- tomcat:9.0-jdk8-temurin : 동일한 에러 발생 (/usr/local/tomcat/bin/setclasspath.sh 파일을 찾을 수 없음)
- tomcat:9-jdk8-corretto : 정상 작동 확인, 에러 발생 없이 컨테이너 실행 가능
참고 자료
기타 (+ gpt)
1) libseccomp에 관하여
- libseccomp는 Linux에서 시스템 호출을 제한하는 라이브러리입니다. 시스템 호출은 프로그램이 운영 체제 커널과 상호작용할 때 사용하는 명령인데, libseccomp는 보안 강화의 일환으로 이 호출을 제한하여 불필요하거나 위험한 시스템 호출을 차단하는 역할을 합니다.
- 예를 들어, 컨테이너 내의 특정 애플리케이션이 허용되지 않은 시스템 호출을 실행하려 할 때 libseccomp는 이 호출을 막아 시스템 보안을 높입니다. Docker에서 사용하는 보안 설정 중 하나가 seccomp이며, libseccomp가 이를 관리합니다.
- 최신 리눅스 커널에서 새로운 시스템 호출이 추가되면, libseccomp도 이를 인식해야 합니다. 만약 Docker나 libseccomp가 오래된 버전이라면 최신 시스템 호출을 인식하지 못해 오류가 발생할 수 있습니다.
2) Focal 기반 이미지에 관하여
- Focal은 Ubuntu의 특정 버전 이름으로, Ubuntu 20.04 LTS(Long-Term Support)를 가리킵니다. LTS는 장기 지원을 의미하며, 안정성 높은 버전입니다.
- Focal 기반 이미지란, Ubuntu 20.04를 기반으로 빌드된 Docker 이미지를 뜻합니다. 예를 들어 tomcat:9-jdk8-focal은 Ubuntu 20.04 (Focal)를 운영체제로 사용하는 Tomcat 이미지를 의미합니다.
- 최신 버전의 Ubuntu가 나올 때마다 Docker 이미지는 그 버전을 기반으로 새롭게 업데이트되는데, 최신 버전이 호환되지 않으면 focal 또는 그 이전 버전을 사용하는 이미지로 전환하여 안정적인 환경을 구축할 수 있습니다.
따라서, libseccomp와의 호환성 문제로 인해 Docker 19에서는 최신 Ubuntu(Jammy, 22.04) 기반보다 Focal 기반 이미지가 더 안정적으로 작동할 가능성이 큽니다.
반응형
'Docker' 카테고리의 다른 글
[Docker] Docker 컨테이너에서 파일 추출하기 (1) | 2024.11.08 |
---|---|
[Docker] Postgres 컨테이너 실행 에러: initdb not found (0) | 2024.11.07 |
[Docker] Docker 컨테이너 실행 오류 Failed to Setup IP Tables (1) | 2024.11.01 |
[Docker] 명령어 정리 (4) | 2024.10.27 |
[Docker] 도커 이미지 (+관련 명령어) (0) | 2024.10.27 |