[Docker/Error] Dockerfile을 이용해 만든 이미지로 실행시킨 컨테이너가 바로 꺼지는 이유
컨테이너가 자동 종료되는 이유
여러 이유가 있겠지만, 도커를 구글링으로만 배워 얕은 지식을 가지고 에러 해결을 위해 헤맨 과정에 대한 기록.
docker logs도 확인해봤을 때 에러 안떠서 머리를 싸메고 있다면 보세요 ..... 급하면 결론 ㄱㄱ
PostgreSQL, Redis를 docker hub에 있는 이미지를 사용하는 것이 아니라,
앞서 진행한 수동설치 과정을 그대로 Dockerfile로 작성하여 이미지 build를 시키고 컨테이너를 띄우려고 했는데,
컨테이너가 떠있지 않고 지속적으로 실패하는 에러가 발생함.
(수동설치 Dockerfile 작성한거에 대해서는 나중에 포스트 업로드 예정)
docker logs {컨테이너 이름} 코드를 작성하여 에러를 확인하고자 하였으나, 에러 메시지도 안뜨고.. 아주 깨끗해서...
docker run -it --rm {이미지 이름}:{tag} bash 이용해서 강제로 접속해 확인했는데, PostgreSQL 포트번호 5432, Redis 포트번호 6379 각 포트번호가 할당되지 않은 것을 확인함. (포트할당 확인: netstat -tupln)
결론부터 말하면, 컨테이너에서 CMD에 입력하는 실행파일을 daemon으로 실행시키면 안됨.
컨테이너 내부에서 daemonize 즉, background로 실행시켰을 경우, 파일을 전부 실행한 것으로 인식하고, 컨테이너 자체를 종료시킴.
예를 들어, 우리가 입력하는 터미널 창에 postgresql를 daemonize no로 실행시킬 경우(즉, foreground로 실행), 다른 터미널 창을 띄워서 다른 작업을 해야하고, 만약 그 터미널 창을 종료시킬 경우, postgresql이 꺼지는 것을 확인할 수 있음. 컨테이너는 이게 실행 원동력임.
(이걸로 3일을 붙잡고 ...
아무튼 결론적으로, docker run 시켰는데 계속 꺼지고, docker logs 도 확인해봤는데 에러 문구도 안떴을 때,
daemonize 꺼져있는지 확인하세요.. Dockerfile 작성할 때 daemonize는 반드시 off.. background 실행 절대 no ...