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 이 아닌 다른 종료 코드로 종료되는 경우 즉시 종료되도록 쉘 옵션을 설정한다.
스크립트는 실패한 명령의 종료 코드와 함께 반환된다.
참고 사이트
728x90
반응형
'DevOps > Docker' 카테고리의 다른 글
docker-compose 실행과 동시에 종료 (docker-compose exited with code 0) (0) | 2023.05.28 |
---|---|
Docker dangling image 삭제하기 (0) | 2023.03.29 |
Docker Mysql 5.7 설치하기 (0) | 2023.03.08 |
What is Docker (2) | 2023.02.03 |
Error response from daemon: Bad response from Docker engine (0) | 2022.11.25 |