Der Container kann nicht vom Docker-Image aus gestartet werden. Es schlägt fehl, wenn wir CMD hinzufügen, um den Filebeat- oder Fluentd-Agenten zu starten.

Der Container kann nicht vom Docker-Image aus gestartet werden. Es schlägt fehl, wenn wir CMD hinzufügen, um den Filebeat- oder Fluentd-Agenten zu starten.

ich kann den Container nicht aus dem Docker-Image starten, das unterhalb von Dockerfile erstellt wird. Es schlägt fehl, wenn wir CMD hinzufügen, um Filebeat oder den Fluentd-Agenten zu starten.

Docker-Datei

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

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Antwort1

Das node:12Bild hat eineEinstiegspunktskript. Wenn ein ENTRYPOINTangegeben ist, verwendet Docker die Werte in CMDalsParameter für diesen Entrypoint-Befehl.

Der Einstiegspunkt des übergeordneten Images kann deaktiviert werden, indem Sie Ihrer Docker-Datei Folgendes hinzufügen:

ENTRYPOINT []

Als Randbemerkung: Wenn CMDin einer Docker-Datei mehrere Anweisungen angegeben werden, wird im resultierenden Image nur die letzte festgelegt.

Wenn das obige Dockerfile und der übergeordnete Einstiegspunkt entfernt sind, /etc/init.d/td-agentist dies PID 1 des Containers. Da es sich um ein Init-Skript handelt, wird es beendet, wenn der Daemon gestartet ist. Wenn PID 1 weg ist, wird der Container beendet.

Um mehrere Programme in einem Container auszuführen,ein Wrapper-Skript oder Prozessmanager wird benötigt. Beachten Sie, dass dies im Allgemeinen nicht empfohlen wird. Beispielsweise wird auf Kubernetes das Sidecar-Containermuster bevorzugt.

verwandte Informationen