@gubber

Как запустить filebeat внутри Docker контейнера?

Добрый день.
Подскажите, как запустить filebeat внутри docker контейнера.

Начинал вот с такого Dockerfile

FROM tomcat:8.5
RUN rm -Rf /usr/local/tomcat/webapps/ROOT/*
RUN mkdir /usr/local/tomcat/webapps-my

COPY filebeat/ /opt/filebeat/
RUN chmod +x /opt/filebeat/filebeat

COPY db-creator.jar /opt/db-creator/

COPY ./docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
ENTRYPOINT ["/opt/filebeat/filebeat", "-e", "-c", "/opt/filebeat/filebeat.yml"]
COPY server.xml /usr/local/tomcat/conf
COPY my.war /usr/local/tomcat/webapps-my/ROOT.war

CMD ["catalina.sh", "run"]


В таком состоянии filebeat запускается но не отпускает контроль, после чего не стартует томкат

Сейчас дошёл до такого варианта

FROM tomcat:8.5
RUN curl -L -O https://artifacts.elastic.co/downloads/beats/fileb...
RUN dpkg -i filebeat-5.2.2-amd64.deb
COPY filebeat.yml /etc/filebeat
RUN update-rc.d filebeat defaults 95 10

COPY db-creator.jar /opt/db-creator/
COPY ./docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

RUN rm -Rf /usr/local/tomcat/webapps/ROOT/*
COPY server.xml /usr/local/tomcat/conf
RUN mkdir /usr/local/tomcat/webapps-my
COPY my.war /usr/local/tomcat/webapps-iqp/ROOT.war

CMD ["catalina.sh", "run"]


Но так не стартует сервис.

Были и промежуточные варианты в виде
CMD ["/etc/init.d/filebeat", "start"]


Всё равно не стартует
  • Вопрос задан
  • 593 просмотра
Пригласить эксперта
Ответы на вопрос 2
Tyranron
@Tyranron
По умолчанию предполагается, что в одном контейнере бежит всего один процесс. Если Вам нужно более одного процесса - либо разносите по отдельным контейнерам (Tomcat отдельно, Filebeat отдельно), либо добавляйте в контейнер какой-то супервизор, который будет курировать несколько процессов и смотреть дабы они не падали. Для Docker образов обычно используют s6 супервизор, который можно удобно использовать через s6-overlay.
Ответ написан
@gubber Автор вопроса
В итоге, пришлось делать обходным путём:
создать start.sh

#!/bin/bash

OUTPUT_LOGFILES=""

service filebeat start

OUTPUT_LOGFILES+="/var/log/filebeat/filebeat "

cd /usr/local/tomcat/

bin/catalina.sh start

OUTPUT_LOGFILES+="/usr/local/tomcat/logs/catalina*.log"

touch $OUTPUT_LOGFILES
tail -f $OUTPUT_LOGFILES &
wait


И конечный Dockerfile выглядит следующим образом

FROM tomcat:8.5
RUN curl -L -O https://artifacts.elastic.co/downloads/beats/fileb...
RUN dpkg -i filebeat-5.2.2-amd64.deb
COPY filebeat.yml /etc/filebeat
COPY ./start.sh /
RUN chmod +x /start.sh

COPY db-creator.jar /opt/db-creator/
COPY ./docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

RUN rm -Rf /usr/local/tomcat/webapps/ROOT/*
COPY server.xml /usr/local/tomcat/conf
RUN mkdir /usr/local/tomcat/webapps-my
COPY my.war /usr/local/tomcat/webapps-my/ROOT.war

CMD ["/start.sh"]


С ним лишь одна проблема - не захватывает логи томката. Но это потому что не умею "готовить кошек".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы