작성
·
141
0
docker run -p 8080:8080 --name mytomcat docker-server
동일하게 명명을 작성했는데
exec /usr/local/tomcat/bin/catalina.sh: invalid argument
라는 오류가 계속 발생합니다.
다른 수강생 분들이 올리신 질문을 참고해서 해결하려고 했지만 오류가 해결되지 않아 여쭈어 봅니다
현재 사용중인 PC는 M3 이며 ssh키 까지는 접속이 되었습니다.
답변 5
0
M3 Macbook Pro 사용 중인데 동일한 이슈가 발생하네요...
제가 수행한 내용은 아래와 같습니다.
가상 서버 구축
이미지 다운로드 (edowon0623/docker-server:m1)
이미지 실행 (docker run --privileged --name manager -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host edowon0623/docker-server:m1 /usr/sbin/init)
가상 서버 SSH 접속 후 Docker 실행
Jenkins 설정
publish over ssh 플러그인 설치 후 SSH 접속 정보 입력
아이템 생성 후 war 빌드 및 가상서버로 딜리버리까지는 완료
가상 서버 내 Docker 빌드 및 실행 시도
Dockerfile
FROM tomcat:9.0.98-jdk17
LABEL org.opencontainers.image.authors="edowon0623@gmail.com"
COPY ./hello-world.war /usr/local/tomcat/webapps
빌드
docker build -t docker-server .
실행
docker run -p 8080:8080 --name mytomcat docker-server:latest
결과
exec /usr/local/tomcat/bin/catalina.sh: invalid argument
올려주신 가상 서버 관련 docker image를 inspect 해본 결과 arch 값도 "Architecture": "arm64" 임을 확인 했습니다.
아마도 가상 서버와의 호환 이슈로 인해 발생하는 것 같은데요. 맥북의 OS 버전에 따라서 상이하게 동작할 가능성은 없을까요? 확인 부탁드립니다.
현재 제 OS 버전은 14.7.1(23H222) 입니다.
0
안녕하세요, 이도원입니다.
문의하신 내용에 대해 확인한 내용 다시 한번 정리해 보려고 합니다. 아래에서 설명하고 있는 모든 서비스들은 모두 Docker container로 실행되었습니다.
Jenkins에서 docker-server로 실행 된 서버를 등록 (SSH 접속을 위해)
docker-server에 미리 저장되어 있는 Dockerfile을 수정
Jenkins에서 Item 생성 후 "빌드 후 조치(Post actions)"로 아래 항목 추가
docker-server로 hello-world.war 파일 전송
docker build
docker conatiner run
docker-server에 SSH로 접속해서 docker image 생성 및 컨테이너 실행이 정상적으로 되었는지 확인
MacOS의 웹 브라우저에서 확인
위 내용에 대한 이미지를 아래와 같이 첨부해 드립니다.
1.Jenkins에서 docker-server로 실행 된 서버를 등록 (SSH 접속을 위해)
docker-server는 배포되는 tomcat 테스트를 위해 8081 port를 미리 오픈(publish) 함
2.docker-server(container id: 2a38d7f65548)에 미리 저장되어 있는 Dockerfile을 수정
tomcat 이미지를 latest 말고 9.x 버전으로 테스트 해 보시기 바랍니다.
3.Jenkins에서 Item 생성 후 "빌드 후 조치(Post actions)"로 아래 항목 추가
docker-server로 hello-world.war 파일 전송
docker build,
docker conatiner run (-> Exec commands 에 2개의 실행 문장 작성)
이미지 명 -> hello-world:v2
빌드 결과 화면
4.docker-server에 SSH로 접속해서 docker image 생성 및 컨테이너 실행이 정상적으로 되었는지 확인
5.MacOS의 웹 브라우저에서 확인
제가 실행했던 환경은 MacOS m1에서 위 과정을 실행 시, docker-server에 생성 된 docker image는 arm64로 빌드되었습니다. 그러나, 그 이후로 실행할 때도 모두 같은 m1 환경이라, arm 이미지 생성에 따른 문제는 없습니다.
추가로 확인해 보시면 좋다고 생각되는 부분은 docker-server 에 포함된 Dockerfile에서 base image를 tomcat:latest로 하지 마시고, 9.x 버전으로 변경해서 해 보시기 바랍니다. (저도 tomcat;9.0.98-jdk17 로 테스트 했습니다)
계속 같은 오류 발생 시, 작업하신 스크립트도 다시한번 공유해 주시면, 저도 동일한 환경으로 다시한번 확인해 보도록 하겠습니다.
감사합니다.
안녕하세요, 이도원입니다.
올려주신 내용으로 확인해 보면, 작업은 잘 진행하신것 같은데, 말씀하신 것 처럼 마지막 docker run 명령어가 실행되지 않은 것 같습니다. 번거로우시겠지만 아래 내용으로 한번 더 확인해 보시고 공유가 가능하시면 공유 부탁드리겠습니다.
docker-server 컨테이너에서 hello-world.war + Dockerfile을 가지고 직접 빌드 해 보시고 컨테이너 실행 (젠킨스에서 작업하신 명령어를 그대로 사용하시면 됩니다)
동일한 오류가 발생 시, 생성 된 이미지를 MacOS에 설치 된 docker desktop에서 실행 (이미지는 docker save 나 docker export 등의 명령어로 추출 가능합니다)
MacOS의 docker desktop에서도 오류가 발생하신 다면, 이미지 자체에 문제가 있을것으로 보이고, 정상 실행 된다면, docker-server 컨테이너가 오류의 원인일 수도 있을 것 같습니다. 어떤 쪽이던 올려주신 정보에서는 추가로 더 확인할 방법이 없어서, 혹시 가능하시다면 아래 이메일로 생성하신 이미지를 한번 보내주시면, 저희가 가지고 있는 M1, M3 MacOS에서도 다시한번 실행해 보도록 하겠습니다.
마지막으로, 이후의 과정에 영향이 있는지를 여쭤보셨는데, Jenkins에 일부 Item들에 대해서는 docker run을 실습하는 부분이 있기도 합니다만, docker run이 어떠한 역할을 위해 실행해 보려고 하는지 이해하신다면, 이부분은 빼시고 진행해 보셔도 괜찮습니다. 본 강의에서의 목적은 Jenkins를 이용하여 CI 과정과 CD 과정이 어떻게 진행되는지 학습하는데 목적이 있기 때문에, 몇몇 스크립트를 실습하시지 못한다고 하여도 이후에 실습 모두가 연관이 있는것이 아닙니다.
혹시 DinD 방식이 아닌 DooD 방식으로 실습하시는게 가능하시다면, 이쪽으로도 실습해 보시기 바랍니다.
edowon0623@gmail.com
감사합니다.
안녕하세요, 이도원입니다.
저희쪽 M3 MacOS 환경에서 위에 안내해 드린 순서대로 작업시에도 정상적으로 실행되고 있습니다. 작업하신 환경하고 동일하게 명령어나 작업 내용을 실행했음에도 문제가 없는것으로 보입니다. 이번 M3 환경에서 작업한 hello-world 이미지(linux/arm64/v8 platform입니다)를 아래 repository에 공유해 드리니, 해당 이미지를 docker-server에서 pull 하신 뒤에 직접 docker container run 명령어를 실행해 보신 뒤에 어떤 결과인지 공유해 주시면 감사드리겠습니다.
https://hub.docker.com/r/edowon0623/hello-world/tags
추가로 작업하셨다는 hello-world:v2 이미지도 docker hub에 공유해 주시면 저희도 해당 이미지로 테스트해 볼 수 있을 것 같습니다.
감사합니다.
0
안녕하세요, 이도원입니다.
올려주신 명령어의 docker-server 이미지는 직접 생성하신 건가요? 아니면, 제가 공유해 드리고 있는 hub.docker.com 사이트에서 다운받으신 이미지 인가요? 만약 제가 공유해 드리고 있는 이미지라면, 아래와 같은 명령어로 실행하는 것 대신,
docker run -p 8080:8080 --name mytomcat docker-server
다음 명령어 실행하셔야 정상적으로 컨테이너가 실행됩니다.
docker run --privileged --name manager -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host edowon0623/docker-server:m1 /usr/sbin/init
위 명령어로 컨테이너를 기동하신 후에는
MacOS 터미널에서 ssh root@127.0.0.1 -p 10022 로 실행 시(암호: P@ssw0rd) 정상적으로 SSH 접속이 되어야 합니다.
혹시 질문하신 내용과 다른 답변이었다면, 어떤 이미지로 실행하셨는지 공유해 주시면 다시 확인해 보도록 하겠습니다.
감사합니다.
현재 MacOs m1칩 환경에서 도커 인 도커 방식으로 사용하고 있으며 로컬PC(m1) 에서 ssh root@127.0.0.1 -p 10022 접속은 정상적으로 확인됩니다
이 후 강의 내용대로 jenkins 빌드는 정상적으로 수행하여 hello-world.war 파일을 받는 것까지는 성공하였고,
Dockerfile을 이용하여 image들 빌드까지도 성공했으나
Dockerfile을 통해 받아온 docker image들을 실행하는 과정에서 아래와 같은 오류에서 막힌 상태입니다..
다른 질문들을 참고하여 모두 시도했으나 실패했습니다
docker run --privileged -p 8080:8080 --name mytomcat docker-server:latest
exec /usr/local/tomcat/bin/catalina.sh: invalid argument
안녕하세요 이도원입니다 .
제가 오늘 오전에 다시한번 테스트한 결과를 공유드리면, m1, m3 MacOS 환경에서 공유해 드렸던 이미지와 소스코드, 명령어 등으로 실행 시 정상 작동 되었습니다.
실행하신 아래 명령어의 Docker 이미지는 직접 생성하신 건가요? 아니면, 제공해 드리는 이미지( edowon0623/docker-server:m1)를 사용하신 걸까요? 공유해 드린 docker 이미지에는 tomcat이 설치되어 있지 않았던 버전이라, 직접 생성하신 이미지라면 저희쪽에서도 테스트해 볼 수 있도록 공유 부탁드립니다. 참고로 제공해 드린 docker-server:m1 이미지는 arm64로 빌드 된 거라 작업하시는 m1, m3 MacOS에서도 잘 작동 될 것 같습니다.
docker image inspect 558af149e159 | grep Arch
"Architecture": "arm64",
질문하신 내용과 다른 답변을 드린 것라면, 번거로우시겠지만 작업하신 환경과 실행 결과를 조금 더 공유해 주시면 감사드리겠습니다.
안녕하세요 선생님
edowon0623/docker-server:m1 image를 docker hub를 통해 받았고 local에서 실행하였으며, 컨테이너 실행하여 local에서 edowon0623/docker-server:m1 컨테이너에 ssh 접속까지는 정상적으로 수행되어 ssh 접속 후 edowon0623/docker-server:m1 image 파일 내에 존재하는 Dockerfile의 tomcat 버전과 COPY 부분의 파일명 변경 후 빌드까지는 수행되었습니다. 그 이후 build된 tomcat 이미지를 수행하는 과정에서 exec /usr/local/tomcat/bin/catalina.sh: invalid argument
오류가 발생한 상태입니다. 강의 내용과 동일하게 진행했습니다.
0
M1 맥북과 같이 ARM 아키텍처를 사용하는 시스템에서 amd64
(x86-64) 기반의 Docker 이미지를 실행하려고 할 때, 아키텍처 불일치로 인해 실행이 실패하거나 성능 문제가 발생할 수 있습니다.
안녕하세요, 이도원입니다.
오늘 새벽에도 m1, m3 MacOS 환경에서 테스트 시 정상 작동 됨을 확인했습니다. 혹시 작업하신 내용이 어떤부분이신지 조금 더 공유해 주시면, 저희도 다시한번 오류를 찾아보도록 하겠습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 황상익님.
사용하고 계신 docker run
명령어에서 발생한 catalina.sh: invalid argument
오류는 주로 Docker 이미지의 환경 설정과 관련이 있을 수 있습니다. 이 오류는 Tomcat의 실행 스크립트가 올바르게 수행되지 못하는 경우에 발생합니다. 몇 가지 체크포인트를 통해 문제를 해결할 수 있습니다.
Tomcat 이미지 확인: 기본적으로 사용하는 Tomcat 이미지가 ARM 아키텍처를 지원하는지 확인해 주세요. M1/M3 Mac의 경우 ARM 아키텍처와 호환되는 이미지를 사용하는 것이 중요합니다.
Dockerfile 확인: 이미지가 ARM 아키텍처와 호환되지 않는다면, 직접 Dockerfile을 작성하여 ARM 기반 이미지를 빌드할 수 있습니다. 예를 들어, Dockerfile 내에서 FROM tomcat
대신 ARM 버전의 이미지를 사용하도록 명시할 수 있습니다.
이미지 업데이트: 사용하시는 이미지가 구형 버전일 수 있습니다. Docker Hub에서 최신 버전을 사용하는지 확인해 보세요.
환경변수 설정 확인: 때때로 환경변수나 파일 권한 문제가 있을 수 있습니다. Dockerfile이나 실행 환경에서 관련 설정을 검토해 보세요.
관련된 문제나 답변을 찾기 어려우셨을 수도 있지만, 비슷한 문제를 겪은 다른 수강생의 해결방안을 보시면 도움이 될 수 있습니다. 아래 링크를 참고하시면 좋겠습니다:
위의 링크에서는 Tomcat 컨테이너 실행 시 발생할 수 있는 다양한 문제와 해결책을 다루고 있습니다. 특히 ARM 기반 하드웨어와 관련된 설정 문제도 확인해 보시면 좋겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
안녕하세요
먼저 현재 로컬에 구성된 환경 이미지 첨부드립니다.
1번
2번
선생님이 알려주신데로 1번과 2번은 정상적으로 수행했으며,
3번과정에서 Console Output 내용으로 볼 때 정상적으로 수행된줄 알았으나
ssh 직접 접속 하여 docker ps를 확인해보니
빌드까지만 정상적으로 수행되고 docker run 실행 과정에서 이전과 동일한 오류가 발생하였습니다.
빌드까지는 정상적으로 수행되는데 해당 실습이 추후 강의에서 꼭 필수 사항일까요? 그렇지 않다면 해당 영상은 스킵 후 진행하도록 하겠습니다.
감사합니다.