無法從 docker 映像啟動容器/如果我們新增 CMD 來啟動 filebeat 或 Fluentd 代理,則會失敗

無法從 docker 映像啟動容器/如果我們新增 CMD 來啟動 filebeat 或 Fluentd 代理,則會失敗

我無法從從 Dockerfile 下面建置的 docker 映像啟動容器如果我們新增 CMD 來啟動 filebeat 或 fluidd 代理,則會失敗。

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

在此輸入影像描述

在此輸入影像描述

答案1

node:12圖像有一個入口點腳本。當指定了 an 時,Docker 將使用asENTRYPOINT中的值CMD此入口點指令的參數

可以透過將以下內容新增至 Dockerfile 來停用父映像入口點:

ENTRYPOINT []

附帶說明一下,當CMD在 Dockerfile 中指定多個指令時,只有最後一個指令會在產生的映像中設定。

刪除上面的 Dockerfile 並刪除父入口點後,/etc/init.d/td-agent容器的 PID 將為 1。由於這是一個初始化腳本,因此在啟動守護程序後它將退出。當PID 1消失時,容器將退出。

要在容器內運行多個程序,需要包裝腳本或流程管理器。請注意,通常不建議這樣做。例如。在 Kubernetes 上,邊車容器模式是首選。

相關內容