728x90
반응형

dockerfile 에서 entrypoint.sh 파일을 작성하면서 exec $@ 명령어를 사용하는 것을 보고 궁금해서 찾아봤다.

 

내가 작성한 dockerfile 은 이렇게 작성되어있다.

(...)

# /etc/hadoop/*.xml 설정파일 변경
ADD entrypoint.sh /opt/hadoop/entrypoint.sh

RUN chmod 755 /opt/hadoop/entrypoint.sh

ENTRYPOINT ["/opt/hadoop/entrypoint.sh"]

마지막에 컨테이너를 실행 후에 entrypoint 를 실행하게 된다. 하지만 entrypoint 를 실행하고나서 컨테이너가 바로 종료된다.
그래서 찾아보다가 entrypoint.sh 파일의 마지막에 exec $@ 명령어를 넣어주는 것을 보았고 바로 적용해보았다.
그랬더니 바로 종료되지 않고 정상적으로 컨데이터가 실행되는 것을 확인할 수 있었다.

 

그럼 exec $@ 가 어떤 동작을 하길래 정상적으로 컨테이너가 실행되었던 것일까?

exec $@ 명령어에 대해서 찾아보니 stackoverflow 의 댓글에서는 이렇게 설명해주었다.

exec $@ 명령은 일반적으로 진입점을 통과시켜 docker 명령을 실행하는 데 사용됩니다.
$@ 의 의미는 현재 실행중인 shell 을 가리키는 명령으로 바꿉니다.

설명을 읽어보니 exec $@ 명렁어를 사용하게 되면 entrypoint.sh 스크립트를 실행하고 나서
다시 도커 컨테이너 bash 로 돌아와 명령을 실행하기 위해서 사용하는 것으로 생각된다.

 

추가적으로 set -e 명령어도 같이 사용하는 것으로 보여 이 부분에 대해서도 찾아보았다.
set -e 명령어에 대해서 stackoverflow 의 댓글에서 이렇게 설명해주고 있다.

set -e 명령어는 실행중인 명령이 0 이 아닌 다른 종료 코드로 종료되는 경우 즉시 종료되도록 쉘 옵션을 설정한다.
스크립트는 실패한 명령의 종료 코드와 함께 반환된다.

 

 

참고 사이트

https://stackoverflow.com/questions/39082768/what-does-set-e-and-exec-do-for-docker-entrypoint-scripts

 

What does set -e and exec "$@" do for docker entrypoint scripts?

I've noticed that many entrypoint.sh scripts for docker do something like this: #!/bin/bash set -e ... code ... exec "$@" What are the set -e and the exec "$@" for?

stackoverflow.com

 

728x90
반응형
복사했습니다!