Não é possível iniciar o contêiner a partir da imagem do docker/Ele falhará se adicionarmos CMD para iniciar o filebeat ou o agente fluentd

Não é possível iniciar o contêiner a partir da imagem do docker/Ele falhará se adicionarmos CMD para iniciar o filebeat ou o agente fluentd

não consigo iniciar o contêiner a partir da imagem do docker que é construída abaixo do Dockerfile. Ele falhará se adicionarmos o CMD para iniciar o filebeat ou o agente fluentd.

Dockerfile

#################################################
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

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Responder1

A node:12imagem tem umscript de ponto de entrada. Quando an ENTRYPOINTé especificado, o Docker usará os valores CMDcomoparâmetros para este comando de ponto de entrada.

O ponto de entrada da imagem pai pode ser desativado adicionando o seguinte ao seu Dockerfile:

ENTRYPOINT []

Como observação lateral, quando várias CMDinstruções são especificadas em um Dockerfile, apenas a última será definida na imagem resultante.

Com o Dockerfile acima e o ponto de entrada pai removido, /etc/init.d/td-agentserá o PID 1 do contêiner. Como este é um script de inicialização, ele será encerrado quando terminar de iniciar o daemon. Quando o PID 1 acabar, o contêiner será encerrado.

Para executar vários programas dentro de um contêiner,é necessário um script wrapper ou gerenciador de processos. Observe que isso geralmente não é recomendado. Por exemplo. no Kubernetes, o padrão de contêiner sidecar é o preferido.

informação relacionada