Docker イメージからコンテナを起動できません / CMD を追加して Filebeat または Fluentd エージェントを起動すると失敗します

Docker イメージからコンテナを起動できません / CMD を追加して Filebeat または Fluentd エージェントを起動すると失敗します

Dockerfile の下からビルドされた Docker イメージからコンテナを起動できません。Filebeat または Fluentd エージェントを起動するために CMD を追加すると失敗します。

Dockerファイル

#################################################
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画像にはエントリポイントスクリプトが指定されるとENTRYPOINT、Dockerは の値をCMD次のように使用します。このエントリポイントコマンドのパラメータ

親イメージのエントリポイントは、Dockerfile に次のコードを追加することで無効にできます。

ENTRYPOINT []

ちなみに、CMDDockerfile で複数の命令が指定されている場合、結果のイメージには最後の命令のみが設定されます。

上記の Dockerfile と親エントリポイントを削除すると、/etc/init.d/td-agentコンテナの PID は 1 になります。これは init スクリプトなので、デーモンの起動が完了すると終了します。PID 1 がなくなると、コンテナは終了します。

コンテナ内で複数のプログラムを実行するには、ラッパースクリプトまたはプロセスマネージャが必要ですただし、これは一般的には推奨されません。たとえば、Kubernetes ではサイドカー コンテナ パターンが推奨されます。

関連情報