docker 이미지에서 컨테이너를 시작할 수 없습니다/filebeat 또는 fluentd 에이전트를 시작하기 위해 CMD를 추가하면 실패합니다.

docker 이미지에서 컨테이너를 시작할 수 없습니다/filebeat 또는 fluentd 에이전트를 시작하기 위해 CMD를 추가하면 실패합니다.

Dockerfile 아래에서 빌드되는 도커 이미지에서 컨테이너를 시작할 수 없습니다. filebeat 또는 fluentd 에이전트를 시작하기 위해 CMD를 추가하면 실패합니다.

도커파일

#################################################
FROM node:12
#install pm2
RUN npm install pm2 -g
RUN apt update
#create dir and copy the code
RUN mkdir -p /home/devops/comera_registration_service/
WORKDIR  /home/devops/comera_registration_service/
COPY . .
#fluentd install
COPY fl.sh . 
RUN sh fl.sh
#install depend
RUN npm install
#start the app
CMD [ "pm2-runtime", "ecosystem.config.js" ]
CMD ["/etc/init.d/td-agent", "start" ]  
#opening port
EXPOSE 3010

여기에 이미지 설명을 입력하세요

여기에 이미지 설명을 입력하세요

답변1

이미지 node:12에는진입점 스크립트. an이 지정되면 Docker는 다음과 같이 ENTRYPOINT값을 사용합니다 .CMD이 진입점 명령에 대한 매개변수.

Dockerfile에 다음을 추가하여 상위 이미지 진입점을 비활성화할 수 있습니다.

ENTRYPOINT []

참고로 CMDDockerfile에 여러 명령이 지정되면 마지막 명령만 결과 이미지에 설정됩니다.

위의 Dockerfile과 상위 진입점이 제거되면 /etc/init.d/td-agent컨테이너의 PID 1이 됩니다. 이는 init 스크립트이므로 데몬 시작이 완료되면 종료됩니다. PID 1이 사라지면 컨테이너가 종료됩니다.

컨테이너 내에서 여러 프로그램을 실행하려면래퍼 스크립트 또는 프로세스 관리자가 필요합니다.. 이는 일반적으로 권장되지 않습니다. 예. Kubernetes에서는 사이드카 컨테이너 패턴이 선호됩니다.

관련 정보