왜 실행이 안될까 - docker image (openjdk) APM agent 설정하기

DevOps Engineer·2022년 10월 4일
0

https://kldp.org/node/165498
https://hub.docker.com/_/openjdk

오늘 하루종일 트러블슈팅하고 왔다 큰 차이를 못 느꼈다. 며칠 째 제자리걸음이다.

그래서 공식문서를 다시 쭉 봤다.

이전에 만든 Dockerfile의 경우

CMD or ENTRYPOINT [ "java", "-jar", "demo.jar"] 만 해도 적당히 실행이 됐는데

EFK 과정에서 APM agent 세팅을 위한 부가적인 옵션을 넣었더니 이미지가 작동을 안한다 미칠노릇이다.
참고로 자바는 잘 모르지만 적어도 실행은 시킬 줄 알겠지 했는데..... 이놈때문에 내 일상에서 머릿속에서 자리 잡았다.

공식문서의 문구에서

Some shells (notably, the BusyBox /bin/sh included in Alpine Linux) do not support environment variables with periods in the names (which are technically not POSIX compliant), and thus strip them instead of passing them through (as Bash does). If your application requires environment variables of this form, either use CMD ["java", ...] directly (no shell), or (install and) use Bash explicitly instead of /bin/sh.

이 부분에서 파파고 해석의 힘을 받고 읽어 봤습니다.

일부 셸(특히 알파인 리눅스에 포함된 BusyBox /bin/sh)은 이름에 마침표가 있는 환경 변수(기술적으로 POSIX와 호환되지 않음)를 지원하지 않으므로 (Bash가 하는 것처럼) 통과하는 대신 제거한다. 애플리케이션에 이 형식의 환경 변수가 필요한 경우 셸 없이 직접 CMD ["java", ...]를 사용하거나 (install 및) /bin/sh 대신 Bash를 명시적으로 사용합니다.

그랬더니 일반적으로 -jar 실행할 때는 문제없는데 부가적인 -xx.xx.xx형태의 옵션이 붙을 경우
커맨드가 바뀌는 듯 하다. 그래서 내일가서 제일 해볼 것이

["bash", "-c", "java ~"] 이런느낌으로 줘볼까 한다.

-c 옵션이 궁금해서 찾아보니 위의 참고문서의 글을 찾았다.

-c string
If the -c option is present, then commands are read from string. If there are arguments after the string, they are assigned to the positional parameters, starting with $0.

실행시킬 파일이 아니라 실행코드라고 한다.

트러블슈팅 결과

환경변수로 처리해야 동작하고 인식이 되는 것을 알 수 있었음

자바에이전트를 실행시킬 때 변수가 계속해서 적용이 안되는 로그를 확인 후
ENV로 옵션의 값을 컨테이너 dockerfile과정에 넣었음

COPY elastic-apm-agent-1.34.0.jar apm-agent.jar
#환경변수
ENV ELASTIC_APM_SERVICE_NAME=app-service-name
ENV ELASTIC_APM_SERVER_URL=http://10.244.3.35:8200
#APM SERVER url 파드를 직접 연결시킴
ENV ELASTIC_APM_APPLICATION_PACKAGES=com.example
ENV ELASTIC_APM_ENVIRONMENT=production
#commandline
ENTRYPOINT  ["java", "-javaagent:/apm-agent.jar" "-jar", "-Dspring.profiles.active=prod", "app.jar"]

기존에는 ENTRYPOINT 내에 옵션으로 다 들어갔었는데 그렇게 명령했을 시 java가 실행될 때 옵션자체가 변경이 안되서 환경변수를 바꿔서 적용시켜봄

profile
madame의 Techblog

0개의 댓글